#include <iostream>
#include <memory>
class IInterface
{
public:
virtual bool Check(const char* str) = 0;
};
template<class T>
class A : public IInterface
{
public:
virtual bool Check(const char* str) { return false; } //1
};
template<>
class A<int> : public IInterface
{
public:
virtual bool Check(const char* str) { return true; } //2
};
int main()
{
std::unique_ptr<IInterface> p(new A<char>);
std::cout << p->Check("abc") << std::endl;
std::unique_ptr<IInterface> p1(new A<int>);
std::cout << p1->Check("abc") << std::endl;
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8bWVtb3J5PgoKY2xhc3MgSUludGVyZmFjZQp7CnB1YmxpYzoKICB2aXJ0dWFsIGJvb2wgQ2hlY2soY29uc3QgY2hhciogc3RyKSA9IDA7Cn07Cgp0ZW1wbGF0ZTxjbGFzcyBUPgpjbGFzcyBBIDogcHVibGljIElJbnRlcmZhY2UKewpwdWJsaWM6CiAgdmlydHVhbCBib29sIENoZWNrKGNvbnN0IGNoYXIqIHN0cikgeyByZXR1cm4gZmFsc2U7IH0gLy8xCn07Cgp0ZW1wbGF0ZTw+CmNsYXNzIEE8aW50PiA6IHB1YmxpYyBJSW50ZXJmYWNlCnsKcHVibGljOgogIHZpcnR1YWwgYm9vbCBDaGVjayhjb25zdCBjaGFyKiBzdHIpIHsgcmV0dXJuIHRydWU7IH0gLy8yCn07CgppbnQgbWFpbigpCnsKCXN0ZDo6dW5pcXVlX3B0cjxJSW50ZXJmYWNlPiBwKG5ldyBBPGNoYXI+KTsKCXN0ZDo6Y291dCA8PCBwLT5DaGVjaygiYWJjIikgPDwgc3RkOjplbmRsOwoJc3RkOjp1bmlxdWVfcHRyPElJbnRlcmZhY2U+IHAxKG5ldyBBPGludD4pOwoJc3RkOjpjb3V0IDw8IHAxLT5DaGVjaygiYWJjIikgPDwgc3RkOjplbmRsOwoKCXJldHVybiAwOwp9Cg==