以下代码使用 GCC 4.4.6 和 Comeau 4.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
到B
解决了这个问题,但是将A::name
成员发布给每个人,而它应该只对特定的模板实例可见,即C<B>
.