#include <type_traits>
#include <iostream>
template<typename T>
struct foo
{
};
template<typename T>
bool operator==( const foo<T>& lhs , const foo<T>& rhs )
{
return true;
}
template<typename T , typename U>
bool operator==( const foo<T>& lhs , const foo<U>& rhs )
{
return false;
}
int main()
{
std::cout << std::boolalpha << ( foo<int>() == foo<int>() ) << std::endl;
std::cout << std::boolalpha << ( foo<int>() == foo<char>() ) << std::endl;
}
I2luY2x1ZGUgPHR5cGVfdHJhaXRzPgojaW5jbHVkZSA8aW9zdHJlYW0+Cgp0ZW1wbGF0ZTx0eXBlbmFtZSBUPgpzdHJ1Y3QgZm9vCnsKCn07CgoKdGVtcGxhdGU8dHlwZW5hbWUgVD4KYm9vbCBvcGVyYXRvcj09KCBjb25zdCBmb288VD4mIGxocyAsIGNvbnN0IGZvbzxUPiYgcmhzICkKewoJcmV0dXJuIHRydWU7Cn0KCnRlbXBsYXRlPHR5cGVuYW1lIFQgLCB0eXBlbmFtZSBVPgpib29sIG9wZXJhdG9yPT0oIGNvbnN0IGZvbzxUPiYgbGhzICwgY29uc3QgZm9vPFU+JiByaHMgKQp7CglyZXR1cm4gZmFsc2U7Cn0KCgppbnQgbWFpbigpCnsKCXN0ZDo6Y291dCA8PCBzdGQ6OmJvb2xhbHBoYSA8PCAoIGZvbzxpbnQ+KCkgPT0gZm9vPGludD4oKSApICAgIDw8IHN0ZDo6ZW5kbDsKCXN0ZDo6Y291dCA8PCBzdGQ6OmJvb2xhbHBoYSA8PCAoIGZvbzxpbnQ+KCkgPT0gZm9vPGNoYXI+KCkgKSA8PCBzdGQ6OmVuZGw7Cn0=