#include <iostream>
#include <string>
#include <complex>
#include <type_traits>
template <class T>
struct is_complex : std::false_type {};
template <class T>
struct is_complex<std::complex<T>> : std::true_type {};
template<class T>
class cc {
public:
template <class TT = T>
typename std::enable_if<!is_complex<TT>::value>::type foo() {
std::cout << "default " << v << std::endl ;
}
template <class TT = T>
typename std::enable_if<is_complex<TT>::value>::type foo() {
std::cout << "complex t " << v << std::endl ;
}
T v ;
};
int main()
{
cc< std::complex<double> > r ;
cc<double> r2 ;
r.foo() ;
r2.foo() ;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8c3RyaW5nPgojaW5jbHVkZSA8Y29tcGxleD4KI2luY2x1ZGUgPHR5cGVfdHJhaXRzPgoKdGVtcGxhdGUgPGNsYXNzIFQ+CnN0cnVjdCBpc19jb21wbGV4IDogc3RkOjpmYWxzZV90eXBlIHt9OwoKdGVtcGxhdGUgPGNsYXNzIFQ+CnN0cnVjdCBpc19jb21wbGV4PHN0ZDo6Y29tcGxleDxUPj4gOiBzdGQ6OnRydWVfdHlwZSB7fTsKCnRlbXBsYXRlPGNsYXNzIFQ+CmNsYXNzIGNjIHsKICAgIHB1YmxpYzoKCiAgICB0ZW1wbGF0ZSA8Y2xhc3MgVFQgPSBUPgogICAgdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8IWlzX2NvbXBsZXg8VFQ+Ojp2YWx1ZT46OnR5cGUgZm9vKCkgewogICAgICAgIHN0ZDo6Y291dCA8PCAiZGVmYXVsdCAiIDw8IHYgPDwgc3RkOjplbmRsIDsKICAgIH0KCiAgICB0ZW1wbGF0ZSA8Y2xhc3MgVFQgPSBUPiAKICAgIHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPGlzX2NvbXBsZXg8VFQ+Ojp2YWx1ZT46OnR5cGUgZm9vKCkgewogICAgICAgIHN0ZDo6Y291dCA8PCAiY29tcGxleCB0ICIgPDwgdiA8PCBzdGQ6OmVuZGwgOwogICAgfQoKICAgIFQgdiA7Cn07CgppbnQgbWFpbigpCnsKICBjYzwgc3RkOjpjb21wbGV4PGRvdWJsZT4gPiByIDsKICBjYzxkb3VibGU+IHIyIDsKCiAgci5mb28oKSA7CiAgcjIuZm9vKCkgOwp9