#include <iostream>
#include <type_traits>
class Numeric {
public:
bool isNumeric() {
return true;
}
};
class String {
};
template<class T>
class Myclass {
private:
T temp;
public:
template<typename U = T, typename std::enable_if<std::is_same<U, Numeric>::value, std::size_t>::type = 0>
void checkNumeric() {
std::cout << "is numeric = " << temp.isNumeric() << std::endl;
}
template<typename U = T, typename std::enable_if<!std::is_same<U, Numeric>::value, std::size_t>::type = 0>
void checkNumeric() {
std::cout << "is numeric = false" << std::endl;
}
};
int main() {
Myclass<Numeric> a;
a.checkNumeric();
Myclass<String> b;
b.checkNumeric();
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dHlwZV90cmFpdHM+CgpjbGFzcyBOdW1lcmljIHsKIHB1YmxpYzoKICBib29sIGlzTnVtZXJpYygpIHsKICAgcmV0dXJuIHRydWU7CiAgfQp9OwoKY2xhc3MgU3RyaW5nIHsKfTsKCnRlbXBsYXRlPGNsYXNzIFQ+CmNsYXNzIE15Y2xhc3MgewogcHJpdmF0ZToKICBUIHRlbXA7CiBwdWJsaWM6CiAgdGVtcGxhdGU8dHlwZW5hbWUgVSA9IFQsIHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPHN0ZDo6aXNfc2FtZTxVLCBOdW1lcmljPjo6dmFsdWUsIHN0ZDo6c2l6ZV90Pjo6dHlwZSA9IDA+CiAgdm9pZCBjaGVja051bWVyaWMoKSB7CiAgIHN0ZDo6Y291dCA8PCAiaXMgbnVtZXJpYyA9ICIgPDwgdGVtcC5pc051bWVyaWMoKSA8PCBzdGQ6OmVuZGw7CiAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBVID0gVCwgdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8IXN0ZDo6aXNfc2FtZTxVLCBOdW1lcmljPjo6dmFsdWUsIHN0ZDo6c2l6ZV90Pjo6dHlwZSA9IDA+CiAgdm9pZCBjaGVja051bWVyaWMoKSB7CiAgIHN0ZDo6Y291dCA8PCAiaXMgbnVtZXJpYyA9IGZhbHNlIiA8PCBzdGQ6OmVuZGw7CiAgfQp9OwoKaW50IG1haW4oKSB7CiBNeWNsYXNzPE51bWVyaWM+IGE7CiBhLmNoZWNrTnVtZXJpYygpOwogTXljbGFzczxTdHJpbmc+IGI7CiBiLmNoZWNrTnVtZXJpYygpOwp9