xml*_*lmx 5 c++ namespaces name-lookup argument-dependent-lookup c++11
struct A
{
enum InnerEnum { X };
A(InnerEnum x)
{}
};
int main()
{
A a(X);
}
Run Code Online (Sandbox Code Playgroud)
编译器抱怨: error C2065: 'X' : undeclared identifier
编译器知道构造函数的参数类型是什么,因此当我将X作为参数传递时,编译器应该知道它是一个有效的参数.
我知道这不是ADL(Argument-dependent Name Lookup,也称为Koenig Lookup),但我认为它很有用且非常方便.因为我不必写如下:
A a(A::X);
Run Code Online (Sandbox Code Playgroud)
我认为ADL规则应该推广到这种情况.
我对吗?
AnT*_*AnT 10
C++中的函数调用受函数重载决策的影响.过载分辨率由参数类型驱动.也就是说,语言在这个方向上"有效":从参数类型到具有给定名称的函数的特定版本.
您建议引入一个反向过程 - 基于函数名称的参数类型推导.这在一般情况下不起作用.它可能适用于只有一个候选函数的情况(如在您的示例中),但是,再次,与在函数重载时在一般情况下工作的原则相反.
当然,当非限定名称上的名称查找除了你的名字之外X还可以看到其他名称时,情况会变得更加复杂.我认为它很容易变得非常违反直觉.XA::X
| 归档时间: |
|
| 查看次数: |
275 次 |
| 最近记录: |