#include <iostream>
#include <type_traits>
template<typename T>
struct Point
{
template<typename U = T>
typename std::enable_if<std::is_same<U, int>::value>::type
MyFunction()
{
std::cout << "T is int." << std::endl;
}
template<typename U = T>
typename std::enable_if<std::is_same<U, float>::value>::type
MyFunction()
{
std::cout << "T is not int." << std::endl;
}
};
int main()
{
Point<int> intPoint;
intPoint.MyFunction();
Point<float> floatPoint;
floatPoint.MyFunction();
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dHlwZV90cmFpdHM+Cgp0ZW1wbGF0ZTx0eXBlbmFtZSBUPgpzdHJ1Y3QgUG9pbnQKewogIHRlbXBsYXRlPHR5cGVuYW1lIFUgPSBUPgogIHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPHN0ZDo6aXNfc2FtZTxVLCBpbnQ+Ojp2YWx1ZT46OnR5cGUKICAgIE15RnVuY3Rpb24oKQogIHsKICAgIHN0ZDo6Y291dCA8PCAiVCBpcyBpbnQuIiA8PCBzdGQ6OmVuZGw7CiAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBVID0gVD4KICB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxzdGQ6OmlzX3NhbWU8VSwgZmxvYXQ+Ojp2YWx1ZT46OnR5cGUKICAgIE15RnVuY3Rpb24oKQogIHsKICAgIHN0ZDo6Y291dCA8PCAiVCBpcyBub3QgaW50LiIgPDwgc3RkOjplbmRsOwogIH0KfTsKCmludCBtYWluKCkKewogIFBvaW50PGludD4gaW50UG9pbnQ7CiAgaW50UG9pbnQuTXlGdW5jdGlvbigpOwoKICBQb2ludDxmbG9hdD4gZmxvYXRQb2ludDsKICBmbG9hdFBvaW50Lk15RnVuY3Rpb24oKTsKfQo=