#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() ;
}