#include <iostream>
template<class From, class To, class Value>
struct convert
{
static Value apply(Value value)
{
std::cout << "different\n";
return value;
}
};
template<class From, class Value>
struct convert<From,From,Value>
{
static Value apply(Value value)
{
std::cout << "same\n";
return value;
}
};
int main()
{
convert<int,long,long>::apply(0L);
convert<int,int,long>::apply(0L);
}
I2luY2x1ZGUgPGlvc3RyZWFtPgoKdGVtcGxhdGU8Y2xhc3MgRnJvbSwgY2xhc3MgVG8sIGNsYXNzIFZhbHVlPgpzdHJ1Y3QgY29udmVydAp7CiAgICBzdGF0aWMgVmFsdWUgYXBwbHkoVmFsdWUgdmFsdWUpCiAgICB7CiAgICAgICAgc3RkOjpjb3V0IDw8ICJkaWZmZXJlbnRcbiI7CiAgICAgICAgcmV0dXJuIHZhbHVlOwogICAgfQp9OwoKdGVtcGxhdGU8Y2xhc3MgRnJvbSwgY2xhc3MgVmFsdWU+CnN0cnVjdCBjb252ZXJ0PEZyb20sRnJvbSxWYWx1ZT4KewogICAgc3RhdGljIFZhbHVlIGFwcGx5KFZhbHVlIHZhbHVlKQogICAgewogICAgICAgIHN0ZDo6Y291dCA8PCAic2FtZVxuIjsKICAgICAgICByZXR1cm4gdmFsdWU7CiAgICB9Cn07CgppbnQgbWFpbigpCnsKICAgIGNvbnZlcnQ8aW50LGxvbmcsbG9uZz46OmFwcGx5KDBMKTsKICAgIGNvbnZlcnQ8aW50LGludCxsb25nPjo6YXBwbHkoMEwpOwp9