#include <iostream>
using namespace std;
namespace foo {
namespace bar {
struct X {};
}
void magic(bar::X const & x) { cout << "foo magic" << endl; }
}
template <typename T>
void magic(T const & t) { cout << "template magic" << endl; }
void test1(){
foo::bar::X x;
magic(x);
}
namespace foo {
inline namespace bar{}
}
void test2(){
foo::bar::X x;
magic(x);
}
int main() {
test1();
test2();
}
I2luY2x1ZGUgPGlvc3RyZWFtPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKbmFtZXNwYWNlIGZvbyB7CgluYW1lc3BhY2UgYmFyIHsKCQlzdHJ1Y3QgWCB7fTsKCX0KCXZvaWQgbWFnaWMoYmFyOjpYIGNvbnN0ICYgeCkgeyBjb3V0IDw8ICJmb28gbWFnaWMiIDw8IGVuZGw7IH0KfQoKdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CnZvaWQgbWFnaWMoVCBjb25zdCAmIHQpIHsgY291dCA8PCAidGVtcGxhdGUgbWFnaWMiIDw8IGVuZGw7IH0KCnZvaWQgdGVzdDEoKXsKCWZvbzo6YmFyOjpYIHg7CgltYWdpYyh4KTsKfQoKbmFtZXNwYWNlIGZvbyB7CglpbmxpbmUgbmFtZXNwYWNlIGJhcnt9Cn0KCnZvaWQgdGVzdDIoKXsKCWZvbzo6YmFyOjpYIHg7CgltYWdpYyh4KTsKfQoKaW50IG1haW4oKSB7Cgl0ZXN0MSgpOwoJdGVzdDIoKTsKfQ==