Este código se compila en msvc/g ++:clases anidadas: El acceso a miembro protegido de la clase envolvente de una clase anidada protegida
class A{
protected:
int i;
class B{
public:
A* a;
B(A* a_)
:a(a_){
}
void doSomething(){
if (a)
a->i = 0;//<---- this part
}
};
public:
A()
:i(0){
}
};
Como se puede ver, B tiene acceso a la sección "protegido" de la clase que lo contiene, aunque no está declarado como amigo.
¿Es este un comportamiento estándar (conforme a las normas)?
A veces uso esta característica, pero no recuerdo una regla que diga que la clase protegida anidada debería tener automáticamente acceso a todos los datos protegidos de la clase adjunta.
Dupe question. Sin embargo, no voy a buscar el original ahora. :) –