次のコードを検討してください。
template<class T>
class Base {
public:
void doSomething(){}
};
template<class T>
class Derived : public Base<T> {
public:
void doMore() {
doSomething(); //Affected line
}
};
「影響を受ける行」とコメントされた行で、g++ (4.7) は次のように述べています。
test.cc:11:16: error: there are no arguments to ‘doSomething’ that depend on a template parameter, so a declaration of ‘doSomething’ must be available [-fpermissive]
今私は疑問に思っています:
- テンプレート パラメータ T が存在しない場合、このエラーは発生しません。違いはなんですか?
- g++ は明らかにこの問題を解決できます (-fpermissive を追加すると、正常にコンパイルされます)。私は、g++ が「ユーザー」 (プログラマー) としての私にとって最高のエクスペリエンスを作ろうとしていると想定しています。g++ がこのコードを受け入れない場合、私にとってどのような利点がありますか?
ありがとう!ネイサン