Tengo el siguiente código donde la clase A declara clase B como amigo. ¿Debería la clase C, declarada dentro de la clase B, poder ver declaraciones privadas/miembros de la clase A?¿El "amigo" de una clase se extiende a las clases declaradas dentro de esa clase?
Se compila sin error con CL versión 16 (Visual Studio 2010), pero gcc g ++ versión 4.1.1 muestra el error "typedef int A :: T es privado en este contexto".
El mismo comportamiento se produce con llamadas a funciones como typedefs (que es la forma en que descubrí la diferencia).
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
};
};
He investigado brevemente, pero no he podido encontrar los términos de búsqueda adecuados. Todavía tengo que leer el estándar. ¿Hay alguna pregunta previa sobre el tema o mencionada en las preguntas frecuentes de C++? ¿Qué comportamiento está imitado por el estándar, si es así?
Consulte http://stackoverflow.com/questions/3584385/friend-access-to-protected-nested-class. –
Este código se ve bien formado para mí. Se compila en gcc 4.5.1 y comeau en línea. –
Prasoon: huh. Me pregunto por qué mi gcc está desactualizado, debería instalarse nuevamente. Oh bien. ¡Gracias! –