У меня есть следующий код, где класс A объявляет класс B как друга. Если класс C, объявленный в классе B, сможет просматривать частные объявления/члены класса A?
Он компилируется без ошибок с CL версии 16 (Visual Studio 2010), но gcc g++ version 4.1.1 дает ошибку "typedef int A:: T является конфиденциальной в этом контексте".
То же самое происходит с вызовами функций как typedefs (именно так я обнаружил разницу).
class A {
friend class B;
typedef int T;
};
class B {
A::T t; // ok
typedef A::T U; // ok
class C {
U u; // ok
A::T v; // compile error on gcc
};
};
Я коротко искал, но не смог найти правильные условия поиска. Я еще не прочитал стандарт. Есть ли какие-либо предыдущие вопросы по этому вопросу или упомянуты в FAQ на С++? Какое поведение накладывается стандартом, если либо?