Buona sera a tutti .. vorrei fare l'overloading dell' operatore ^ (con lo scopo di effettuare l'elevamento a potenza degli elementi della matrice definita come template .. )

ora io vorrei usare un qualsiasi tipo float , double , int .. etc .. come argomento dell operatore .. cosi` ho pensato di definirlo come template interno alla classe .. ma non sempra funzionare .. mi spiego :

la definizione della classe e` questa

codice:
template<typename mType> class Matrix;

template<typename mType> 
std::ostream& operator<< (std::ostream& , Matrix<mType> &);  

template<typename mType> 
std::ostream& operator<< (std::ostream& , const Matrix<mType> &);  

template<typename mType>
Matrix<mType> operator+(const Matrix<mType>& ,const Matrix<mType>&); 

template<class mType>
class Matrix
{
	friend std::ostream&  operator<< <mType>(std::ostream& , Matrix<mType>& );
	friend std::ostream&  operator<< <mType>(std::ostream& , const  Matrix<mType>& );
	friend Matrix<mType> operator+ <>( const Matrix<mType>& , const Matrix<mType>& );   

	public:
	inline Matrix(unsigned int = 3, unsigned int = 3 );    // 3x3 as defaulf matrix
	Matrix(unsigned int, unsigned int, mType );     // constructor with initialization
	~Matrix();
	inline bool isEmpty()const { return empty_ ; }
	inline bool allocate( unsigned int , unsigned int );
	void print( unsigned int = 5 , unsigned int = 3)const ;	 //	 weight and precision as defaul .. 
	void Rand();
	void Rand(unsigned int , unsigned int );
	inline unsigned int getRowSize()const{ return row_ ;}
	inline unsigned int getColumnSize()const{ return column_ ;}
	inline vector<unsigned int> size()const;
	inline mType& operator()(unsigned int , unsigned int )const;
#   include "proxy.H"
	inline Proxy operator[]( unsigned int i ){ return Proxy(*this,i); }
	Matrix<mType>& operator=( const Matrix<mType>& );   
	
	template<typename T> Matrix<mType>& operator^ (const T);   
	bool operator==(const Matrix<mType>& );

	private:
	unsigned int row_ 	;
	unsigned int column_;		
	mType ** mPtr_ 	;
	
//	utility function 	
	bool isAllocated_;
	bool empty_;
	inline bool allocate_();
	bool initialize_( mType &) ;

};
l' operatore ridefinito fuori dal corpo e` cosi` dichiarato :


codice:
template<typename mType, typename T>
Matrix<mType>& Matrix<mType>::template operator^(const T exp)
{
		for( unsigned int i=0; i< row_ ; i++ )
			for( unsigned int j=0; j< column_ ; j++ )
				this->mPtr_[i][j] = pow (mPtr_[i][j], exp);
		return *this;
}
e l'errore che ottengo e` il seguente :

codice:
In file included from main.C:6:
matrix.H:302: error: prototype for ‘Matrix<mType>& Matrix<mType>::operator^(T)’ does not match any in class ‘Matrix<mType>’
matrix.H:51: error: candidate is: template<class mType> template<class T> Matrix& Matrix::operator^(T)

non so se la definizione di template vada bene .. help me
grazie in anticipo