#include <stdio.h>
#include <stdint.h>
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 <typename Type> struct Foo {
template <typename T> void import() {}
template <typename T> auto func() {}
operator bool() { return true; }
template <typename T> operator T() { return {}; }
template <typename T> void operator<<(T t) {}
};
template <typename Type> 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<double> f;
f.import <int>();
f.func<int>();
f.func<ns::Foo<int>>();
f.operator bool();
f.operator a::c();
f.operator ns::Foo<int>();
f.operator<<(5);
f.operator<< <ns::Foo<int>>({});
ns::g<int>();
ns::g<char>();
return 0;
}