После поиска в 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