#include <iostream>
using namespace std;
class F
{
};
class S : public F
{
};
template<typename X, typename Y>
class check
{
class F { };
static F find( ... );
class T { F f[2]; };
static T find( Y* );
public:
enum { m = sizeof(T) == sizeof(find(static_cast<X*>(0)))};
};
template <class Q, class R>
bool checkIf() {
return check<Q, R>::m;
}
int main() {
check <class F, class S> t (F,S);
cout<< checkIf<class F, class S>() <<endl;
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKY2xhc3MgRiAKewoJCn07CmNsYXNzIFMgOiBwdWJsaWMgRgp7CgkKfTsKCnRlbXBsYXRlPHR5cGVuYW1lIFgsIHR5cGVuYW1lIFk+CmNsYXNzIGNoZWNrCnsKCWNsYXNzIEYgeyB9OwoJc3RhdGljIEYgZmluZCggLi4uICk7CgljbGFzcyBUIHsgRiBmWzJdOyB9OwoJc3RhdGljIFQgZmluZCggWSogKTsKCXB1YmxpYzoKCQllbnVtIHsgbSA9IHNpemVvZihUKSA9PSBzaXplb2YoZmluZChzdGF0aWNfY2FzdDxYKj4oMCkpKX07Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgUSwgY2xhc3MgUj4KYm9vbCBjaGVja0lmKCkgewoJcmV0dXJuIGNoZWNrPFEsIFI+OjptOwp9CgppbnQgbWFpbigpIHsKCWNoZWNrIDxjbGFzcyBGLCBjbGFzcyBTPiB0IChGLFMpOwoJY291dDw8IGNoZWNrSWY8Y2xhc3MgRiwgY2xhc3MgUz4oKSA8PGVuZGw7CglyZXR1cm4gMDsKfQ==