#include <iostream>
template<typename Lhs, typename Rhs>
struct Match
{
static const bool Value = false;
};
template<typename T>
struct Match<T, T>
{
static const bool Value = true;
};
template<typename T>
struct IsUS
{
static const bool Value = Match<T, unsigned short int>::Value;
};
template<typename T>
struct IsUL
{
static const bool Value = Match<T, unsigned long int>::Value;
};
template<typename T>
struct IsSS
{
static const bool Value = Match<T, signed short int>::Value;
};
template<typename T>
struct IsSL
{
static const bool Value = Match<T, signed long int>::Value;
};
template<typename T>
struct IsInt
{
static const bool Value = IsUS<T>::Value || IsUL<T>::Value || IsSS<T>::Value || IsSL<T>::Value;
};
int main()
{
std::cout << std::boolalpha;
std::cout << IsInt<int>::Value;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgp0ZW1wbGF0ZTx0eXBlbmFtZSBMaHMsIHR5cGVuYW1lIFJocz4Kc3RydWN0IE1hdGNoCnsKCXN0YXRpYyBjb25zdCBib29sIFZhbHVlID0gZmFsc2U7Cn07CnRlbXBsYXRlPHR5cGVuYW1lIFQ+CnN0cnVjdCBNYXRjaDxULCBUPgp7CglzdGF0aWMgY29uc3QgYm9vbCBWYWx1ZSA9IHRydWU7Cn07CnRlbXBsYXRlPHR5cGVuYW1lIFQ+CnN0cnVjdCBJc1VTCnsKCXN0YXRpYyBjb25zdCBib29sIFZhbHVlID0gTWF0Y2g8VCwgdW5zaWduZWQgc2hvcnQgaW50Pjo6VmFsdWU7Cn07CnRlbXBsYXRlPHR5cGVuYW1lIFQ+CnN0cnVjdCBJc1VMCnsKCXN0YXRpYyBjb25zdCBib29sIFZhbHVlID0gTWF0Y2g8VCwgdW5zaWduZWQgbG9uZyBpbnQ+OjpWYWx1ZTsKfTsKdGVtcGxhdGU8dHlwZW5hbWUgVD4Kc3RydWN0IElzU1MKewoJc3RhdGljIGNvbnN0IGJvb2wgVmFsdWUgPSBNYXRjaDxULCBzaWduZWQgc2hvcnQgaW50Pjo6VmFsdWU7Cn07CnRlbXBsYXRlPHR5cGVuYW1lIFQ+CnN0cnVjdCBJc1NMCnsKCXN0YXRpYyBjb25zdCBib29sIFZhbHVlID0gTWF0Y2g8VCwgc2lnbmVkIGxvbmcgaW50Pjo6VmFsdWU7Cn07CnRlbXBsYXRlPHR5cGVuYW1lIFQ+CnN0cnVjdCBJc0ludAp7CglzdGF0aWMgY29uc3QgYm9vbCBWYWx1ZSA9IElzVVM8VD46OlZhbHVlIHx8IElzVUw8VD46OlZhbHVlIHx8IElzU1M8VD46OlZhbHVlIHx8IElzU0w8VD46OlZhbHVlOwp9OwppbnQgbWFpbigpCnsKCXN0ZDo6Y291dCA8PCBzdGQ6OmJvb2xhbHBoYTsKCXN0ZDo6Y291dCA8PCBJc0ludDxpbnQ+OjpWYWx1ZTsKfQ==