>>52
あと49にも書いたのですが,前方参照がわずらわしいなら,friend関数の定義を
クラススコープ内に書くのもおススメします.(49の書き方はわかりにくかったですね)

template<typename X> class Matrix{
...
friend Matrix<X> operator*(Matrix<X> const & lhs, Matrix<X> const & rhs){
//ここにoperator*の定義を書いてしまう.
}
};