template<class Element> struct TMatrixT; typedef TMatrixT<double> TMatrixD; void f(const TMatrixD &m); template<class Element> struct TMatrixT { template <class Element2> TMatrixT(const TMatrixT<Element2> &); ~TMatrixT() {} void Determinant () { f(*this); } }; template struct TMatrixT<float>; template struct TMatrixT<double>;