После поиска aroung SO один вопрос научил меня, что лексическая область функции встроенного друга - это класс, который он определил, то есть он может получить доступ, например. typedef
в классе без их квалификации. Но потом я подумал, что каков фактический объем такой функции? GCC по крайней мере отвергает все мои попытки вызвать его. Может ли функция, например, в этом случае когда-либо вызываться через другие средства, отличные от ADL, что невозможно здесь без аргументов?
Стандартные цитаты оценены, так как я в настоящее время не могу получить доступ к моей копии.
namespace foo{
struct bar{
friend void baz(){}
void call_friend();
};
}
int main(){
foo::baz(); // can't access through enclosing scope of the class
foo::bar::baz(); // can't access through class scope
}
namespace foo{
void bar::call_friend(){
baz(); // can't access through member function
}
}
приводит к следующим ошибкам:
prog.cpp: In function ‘int main()’:
prog.cpp:9: error: ‘baz’ is not a member of ‘foo’
prog.cpp:10: error: ‘baz’ is not a member of ‘foo::bar’
prog.cpp: In member function ‘void foo::bar::call_friend()’:
prog.cpp:15: error: ‘baz’ was not declared in this scope