ここに古いコードベースがあり、保護されたメンバー変数を使用していました。これが良いアイデアであるかどうかは、議論することができます。ただし、コードは gcc3 で正常にコンパイルされている必要があります。クラステンプレート Foo から保護されたメンバー x を使用する派生テンプレートクラス Bar があります
template <class Something> class Foo {
public:
// stuff...
protected:
some::type x;
}
template <class Something> Bar : Foo<Something> {
public:
void cleanup();
}
また、cleanup() のメソッド宣言では、x で何かが行われています。
template <class Something> void Bar<Something>::cleanup() {
doSomeThingCleanUpLike (x);
}
これは、gcc3 では機能するはずでしたが、gcc4 では機能しません。に変更すると動作します
doSomeThingCleanUpLike (this->x);
なぜそうなのですか?