#include <iostream>
#include <typeinfo>
using namespace std;
class X {
public:
template<typename T> bool InstanceOf() {
cout << typeid(*this).name() << " " << typeid(T).name() << endl;
return typeid(T) == typeid(*this);
}
};
class A: public X {};
int main() {
A a;
cout << a.InstanceOf<X>();
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dHlwZWluZm8+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CgpjbGFzcyBYIHsKcHVibGljOgogICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gYm9vbCBJbnN0YW5jZU9mKCkgewogICAgICAgIGNvdXQgPDwgdHlwZWlkKCp0aGlzKS5uYW1lKCkgPDwgIiAiIDw8IHR5cGVpZChUKS5uYW1lKCkgPDwgZW5kbDsKICAgICAgICByZXR1cm4gdHlwZWlkKFQpID09IHR5cGVpZCgqdGhpcyk7CiAgICB9Cn07CgpjbGFzcyBBOiBwdWJsaWMgWCB7fTsKCmludCBtYWluKCkgewoJQSBhOwogICAgY291dCA8PCBhLkluc3RhbmNlT2Y8WD4oKTsKCXJldHVybiAwOwp9