struct A
{
enum InnerEnum { X };
A(InnerEnum x)
{}
};
int main()
{
A a(X);
}
コンパイラは不平を言います:error C2065: 'X' : undeclared identifier
コンパイラーはコンストラクターのパラメーターの型が何であるかを認識しているため、X を引数として渡すと、コンパイラーはそれが有効な引数であることを認識する必要があります。
これが ADL (Argument-dependent Name Lookup、Koenig Lookup とも呼ばれる) ではないことはわかっていますが、便利でかなり便利だと思います。次のように書く必要がないからです。
A a(A::X);
ADL ルールはそのような場合に一般化されるべきだと思います。
私は正しいですか?