サブクラステンプレートをプライベートとして宣言し、次にメンバーを保護として宣言するコードがあります。
class X {
private:
template <class T>
class Y {
public:
void somethingToDo();
// definition
};
protected:
Y<SomeType> _protectedMember;
// More definition
};
class Z : public virtual X{
public:
void f();
}
void Z::f() {
...
_protectedMember.somethingToDo();
}
もともと私はこれをgcc4.3.4でコンパイルし、それを受け入れました。次に、さまざまなプラットフォームでGCC、IBM、およびMicrosoftコンパイラーに対してビルドを試みるためにそれを送信しましたが、非gccコンパイラーはそれを拒否しました。これは、gcc(のこのバージョン)の標準への準拠を示すもののようです。しかし、結論を出す前に、技術的に正しいことを確認したいと思います。
ありがとう。