After having asked more or less the same question here myself, I wanted to share the (apparently) updated answer for C++11:
Quoted from https://stackoverflow.com/a/14759027/1984137:
standard $11.7.1
“A nested class is a member and as such has the same access rights as
any other member. The members of an enclosing class have no special
access to members of a nested class; the usual access rules shall be
obeyed”and the usual access rules specify that:
“A member of a class can also access all the names to which the class
has access…”specific examples has been given in the standard:
class E {
int x;
class B { };
class I {
B b; // OK: E::I can access E::B
int y;
void f(E* p, int i) {
p->x = i; // OK: E::I can access E::x
}
};
}