Если я определяю внутренний класс в С++, он автоматически является другом класса, который его содержит? Например, это законно:
class Outer {
public:
class Inner {
public:
void mutateOuter(Outer& o);
};
private:
int value;
};
void Outer::Inner::mutateOuter(Outer& o) {
o.value ++; // Legal? Or not?
}
Я спрашиваю, потому что на некоторых компиляторах, которые я пробовал (VS2003), этот код не будет работать, но я слышал, по крайней мере, анекдотически, что он работает на некоторых компиляторах. Я не могу найти соответствующий раздел в спецификации С++ об этом, и если кто-нибудь может привести что-то конкретное, что скажет, что это или не является законным, это было бы здорово.