, SFINAE. is_complex cc, . std::enable_if ++ 14. ():
#include <iostream>
#include <complex>
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> // To make SFINAE work
typename std::enable_if<!is_complex<TT>::value>::type foo() {
std::cout << "default " << v << std::endl ;
}
template <class TT = T> // To make SFINAE work
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() ;
}
Jarod42, print templated member function like this ():
template<class T>
class cc {
template <typename TT>
void print(const TT&v) { std::cout << v << std::endl ;}
template <typename TT>
void print(const std::complex<TT>& c) { std::cout << "complex " << c << std::endl; }
public:
void foo() { print(v); }
T v ;
};