Какова область действия встроенных функций друга?

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

32
задан Andrew Marshall 21 November 2011 в 05:30
поделиться