次のコードは、GCC4.4.6およびComeau4.3.10を使用してコンパイルされます。
#include <iostream>
struct A { int name; };
template<typename T> struct C : T { using T::name; };
struct B : private A { friend struct C<B>; };
int main()
{
C<B> o;
o.name = 0;
}
VC++10では次のエラーが発生します。
main.cpp(4): error C2877: 'A::name' is not accessible from 'A' main.cpp(10): error C2247: 'A::name' not accessible because 'B' uses 'private' to inherit from 'A'
これを可能にする優れたクロスコンパイラの回避策はo.name = 0;
何ですか?
注:using A::name
toを追加するとB
問題は解決しますが、メンバーはすべてのユーザーに公開されA::name
ますが、特定のテンプレートのインスタンス化、つまり。にのみ表示される必要がありますC<B>
。