#include #include namespace a { class c { public: c(); ~c(); void func1() { puts (__PRETTY_FUNCTION__); } void func2() { puts (__PRETTY_FUNCTION__); } void func3() { puts (__PRETTY_FUNCTION__); } }; c::c() {} c::~c() {} } namespace aa { class cc { public: cc(); ~cc(); void func1() { puts (__PRETTY_FUNCTION__); } void func2() { puts (__PRETTY_FUNCTION__); } void func3() { puts (__PRETTY_FUNCTION__); } }; cc::cc() {} cc::~cc() {} } namespace b { class c { public: c(); ~c(); void func1() { puts (__PRETTY_FUNCTION__); } void func3() { puts (__PRETTY_FUNCTION__); } }; c::c() {} c::~c() {} } namespace c { class d { public: d () {} ~d() {} void func2() { puts (__PRETTY_FUNCTION__); } void func3() { puts (__PRETTY_FUNCTION__); } }; } namespace ns { template struct Foo { template void import() {} template auto func() {} operator bool() { return true; } template operator T() { return {}; } template void operator<<(T t) {} }; template void g() {} } // namespace ns int main (int argc, char const *argv[]) { a::c ac; aa::cc aac; b::c bc; c::d cd; ac.func1(); ac.func2(); ac.func3(); aac.func1(); aac.func2(); aac.func3(); bc.func1(); bc.func3(); cd.func2(); cd.func3(); ns::Foo f; f.import (); f.func(); f.func>(); f.operator bool(); f.operator a::c(); f.operator ns::Foo(); f.operator<<(5); f.operator<< >({}); ns::g(); ns::g(); return 0; }