C++相談室 part29
■ このスレッドは過去ログ倉庫に格納されています
018256
NGNGいろいろやってみてわかりました。
結局 icc8.0/vc7.1/gcc 共
前方宣言に加えて、クラス内部でのfriend 関数の宣言をメンバ関数より先に行うことで、
スコープ解決子の助けなくコンパイルできることがわかりました。
因みに、(::func<X>)はgccが許可しません。
具体的に書くと次の通りです。
template< class X > class Matrix;
template<class X> Matrix<X> & Func( Matrix<X> &);
template<typename X> class Matrix{
friend Matrix<X> & (::Func<X>)( Matrix<X> &);
Matrix<X> & Func(void);
};
>>58にiccでコンパイルできたと書きましたが、Funcをコールしてないときに
コンパイルできてるだけで、Funcをコールするとリンクエラーになってました。
もちろんgcc はfriend 関数とメンバ関数の宣言順なんて関係なく通ります。
やっぱり、gccの方が歴史も古い分、出来がいいような気がしますが・・・?
■ このスレッドは過去ログ倉庫に格納されています