struct A
{
enum InnerEnum { X };
A(InnerEnum x)
{}
};
int main()
{
A a(X);
}
Der Compiler beschwert sich: error C2065: 'X' : undeclared identifier
Warum unterstützt C++ 11 die Namenssuche nicht?
Der Compiler weiß, was der Parametertyp Konstruktor ist, so, wenn ich X als Argument übergeben, sollte der Compiler weiß, dass es ein gültiges Argument ist.
Ich weiß, das ist nicht ADL (Argument-abhängige Name Lookup, auch bekannt als Koenig Lookup), aber ich denke, es ist nützlich und ziemlich praktisch. Da muss ich nicht schreiben, wie folgt:
A a(A::X);
Ich denke, die ADL Regel sollte auf einen solchen Fall verallgemeinert werden.
Bin ich richtig?
Dies ist wie die Umkehrung von ADL ... FDL (Funktionsabhängige Lookup). –
Haben Sie überlegt, wie dies zutreffen würde, wenn Sie auch eine lokale Variable namens 'X' haben? Und unabhängig davon, wie ich Ihre Frage gelesen habe, sagen Sie, dass das C++ ungültig ist, und fragen, ob sich der C++ - Standard ändern sollte. Das ist der falsche Ort dafür. – hvd
Danke, hvd. Sie haben uns eine überzeugende Begründung gegeben. – xmllmx