#include <iostream>
template <typename T1>
inline bool test(T1 x, T1 s, T1 e)
{
std::cout << "generic" << std::endl;
return (s <= x && x <= e);
}
template <typename T1, typename T2>
inline bool test(T1 x, T1 s, T2 e)
{
std::cout << "different T2" << std::endl;
return (s <= x && x <= e);
}
template <typename T1, typename T2, typename T3>
inline bool test(T1 x, T2 s, T3 e)
{
std::cout << "different T3" << std::endl;
return (s <= x && x <= e);
}
int main(void)
{
test(1, 2, 3);
test(1, 2, 3.);
test(1, 2L, 3.);
}
I2luY2x1ZGUgPGlvc3RyZWFtPgoKdGVtcGxhdGUgPHR5cGVuYW1lIFQxPgppbmxpbmUgYm9vbCB0ZXN0KFQxIHgsIFQxIHMsIFQxIGUpCnsKICBzdGQ6OmNvdXQgPDwgImdlbmVyaWMiIDw8IHN0ZDo6ZW5kbDsKICByZXR1cm4gKHMgPD0geCAmJiB4IDw9IGUpOwp9Cgp0ZW1wbGF0ZSA8dHlwZW5hbWUgVDEsIHR5cGVuYW1lIFQyPgppbmxpbmUgYm9vbCB0ZXN0KFQxIHgsIFQxIHMsIFQyIGUpCnsKICBzdGQ6OmNvdXQgPDwgImRpZmZlcmVudCBUMiIgPDwgc3RkOjplbmRsOwogIHJldHVybiAocyA8PSB4ICYmIHggPD0gZSk7Cn0KCnRlbXBsYXRlIDx0eXBlbmFtZSBUMSwgdHlwZW5hbWUgVDIsIHR5cGVuYW1lIFQzPgppbmxpbmUgYm9vbCB0ZXN0KFQxIHgsIFQyIHMsIFQzIGUpCnsKICBzdGQ6OmNvdXQgPDwgImRpZmZlcmVudCBUMyIgPDwgc3RkOjplbmRsOwogIHJldHVybiAocyA8PSB4ICYmIHggPD0gZSk7Cn0KCmludCBtYWluKHZvaWQpCnsgCiAgdGVzdCgxLCAyLCAzKTsKICB0ZXN0KDEsIDIsIDMuKTsKICB0ZXN0KDEsIDJMLCAzLik7Cn0=