#include <iostream>
#include <complex>

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 ;
};

int main()
{
  cc< std::complex<double> > r ;
  cc<double> r2 ;

  r.foo() ;
  r2.foo() ;
}