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