// -*- compile-command: "g++ -Iinclude -D_GLIBCXX_DEBUG -fsanitize=address,undefined -g3 -ggdb3 -std=c++17 example.cpp -o example && SOI_COLOR=1 SOI_EOFCHECK=1 ./example <<< '4 5 blub 3 1 4'" -*- #include inline std::string methodName(const std::string& prettyFunction) { size_t colons = prettyFunction.find("::"); size_t begin = prettyFunction.substr(0,colons).rfind(" ") + 1; size_t end = prettyFunction.rfind("(") - begin; return prettyFunction.substr(begin,end) + "()"; } struct A{ void operator()() const { dbg(methodName(__PRETTY_FUNCTION__)); dbg("here"); } void bar(int a, int b, string c) const { dbg("imbar"); } void foo(int a=3, int b=5, string c="hi") const { dbg("bar"); } }; signed main() { A a; a(); a.foo(); a.bar(3,4,"hi"); print("this should not be in the output file"); redirect_output("example.out"); auto [i, j] = read(); print(i, j); print("read string",read()); print('h','e','l','l','o'); print("false",'=',false); print("true",'=',true); print(read_vector(3)); int l=3, r=5; dbg(tuple{l, r}); dbg(); dbg("hi"); string s="world"; dbg(s); dbg(); dbg(false); dbg(true); dbg('c'); vector pi{3,1,4,1,5,9,2,6}; dbg(pi); dbg(vector{3,1,4,1,5,9,2,6}); dbg(vector>{{3,1},{4,1}}); dbg(vector>>{{3,{"hi"}},{4,{"hello", "world"}}}); dbg(set{3,1,4}); dbg(map{{3,"three"},{1,"one"}}); dbg(tuple{unordered_map{{3,"three"},{1,"one"}}}); dbg(unordered_set{3,1,4}); print("v-- empty line"); print(); print("^-- empty line"); print("tuple",make_tuple(3, 1, 4, 1)); print(vector{3,1,4,1,5,9,2,6}); print(vector>{{3,1},{4,1}}); print(vector>>{{3,{"hi"}},{4,{"hello", "world"}}}); print(set{3,1,4}); print(map{{3,"three"},{1,"one"}}); print(tuple{unordered_map{{3,"three"},{1,"one"}}}); print(unordered_set{3,1,4}); print_no_space("Case #", 0, ": "); print_no_space(42); print_no_space(); print(); redirect_input("example.in"); print("reading from example.in:", read_string()); redirect_input("example.in"); print("reading from example.in:", read_string()); print("this is the last line on example.out"); reset_output(); print("this is stdout only"); }