Если я определяю внутренний класс в C ++, автоматически ли он становится другом класса, который его содержит? Например, это законно:
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), этот код не будет работать, но я слышал по крайней мере анекдотически, что он работает на некоторых компиляторах. Я не могу найти соответствующий раздел в спецификации C ++ по этому поводу, и если кто-то может процитировать что-то конкретное, что скажет, что это или не законно, что было бы здорово.