Функция друга f
не имеет доступа к частному члену окружающего класса A
.
#include <iostream>
class A{
const static int p = 1;
class B {
friend void f() {
std::cout << p << '\n';
std::cout << q << '\n';
}
};
public:
const static int q = 2;
};
void f();
int main()
{
f();
}
По крайней мере, это то, что я думаю, говорит [class.nest]/4 в N4140 (см. ниже).
§9.7/4
Подобно функции-члену, функция-друг (11.3), определенная во вложенном классе, находится в лексической области видимости этого класса; она подчиняется тем же правилам привязки имен, что и статическая функция-член этого класса (9.4), но не имеет специальных прав доступа к членам окружающего класса.