C ++ 03 Standard $ 11,8 / 1: [class.access.nest]
Члены вложенного класса не имеют специального доступа к членам включающего класса, ни к классам или функциям, которые дали дружбу окружающему классу;должны соблюдаться обычные правила доступа (пункт 11). Члены включающего класса не имеют специального доступа к членам вложенного класса;должны соблюдаться обычные правила доступа (пункт 11).
Но это недостаток:
45.Доступ к вложенным классам
В C ++ 11 это было исправлено: в C ++ 11 вложенные классы имеют доступ к закрытым членам включающего класса (хотя включающий класс по-прежнемуне имеет доступа к закрытым членам вложенных классов).
C ++ 11 Стандарт 11.7 Вложенные классы: говорит
Вложенный класс - эточлен и как таковой имеет те же права доступа, что и любой другой участник.Члены включающего класса не имеют специального доступа к членам вложенного класса;должны соблюдаться обычные правила доступа (пункт 11).[
class E {
int x;
class B { };
class I {
B b; // OK:E::I can accessE::B
int y;
void f(E* p, int i) {
p->x = i; // OK:E::I can accessE::x
}
};
int g(I* p) {
return p->y; // error:I::y is private
}
};
—end example]
Пример похож на тот, о котором вы говорите, и наглядно показывает его правильное поведение.