Ich habe den folgenden Code:Friend-Funktion ist in der Klasse nicht sichtbar
struct M {
friend void f() {}
M() {
f(); // error: 'f' was not declared in this scope
}
};
int main() {
M m;
}
Sowohl g ++ 4.8 und clang3.4 scheitern, es zu kompilieren, weil f
innerhalb M
nicht sichtbar ist oder so sagen sie.
Allerdings gibt die Norm ein Beispiel eines ähnlichen Code
class M {
friend void f() { } // definition of global f, a friend of M,
// not the definition of a member function
};
und sagt, dass
A
friend
Funktion in einer Klasse definiert ist in dem (lexikalischen) Umfang der Klasse in was es definiert ist.
(ISO/IEC 14882: 2011 11.3 Freunde [class.friend] p6, p7)
Daraus kann ich nicht verstehen, wie Compiler nicht f
finden kann, die in derselben Klasse definiert ist, wo es ist benutzt.
Es ist irgendwie unwahrscheinlich, dass beide Compiler den gleichen Fehler haben.
Also, was habe ich vermisst?
Wo haben Sie es erklärt? –