在VC ++ 2010中使用Argument-Dependent Lookup时,我使用>>> func(1, 2, 3, 4, 5)
1
2
(3, 4, 5)
生成了参数并遇到了一些奇怪的结果:
decltype()
以上结果正常执行:
template<typename T>
struct Type {
typedef T type;
};
namespace NSC {
typedef enum {
mon
} DOW;
void proc1(DOW s, int a) {
printf("int proc1\n");
}
void proc1(DOW s, long long a) {
printf("long long proc1\n");
}
}
void p1(int a) {
printf("int p1\n");
}
void p1(long long a) {
printf("long long p1\n");
}
long long g;
int h;
int _tmain(int argc, _TCHAR* argv[])
{
NSC::DOW s=(NSC::DOW)0;
//proc1(s,(decltype(g))4.0);
proc1(s,(Type<decltype(2LL)>::type)4.0);
proc1(s,(Type<decltype(2)>::type)4.0);
p1((decltype(2LL))4);
p1((decltype(2))4);
return 0;
}
请注意,long long proc1
int proc1
long long p1
int p1
用于表明类型转换与依赖于参数的查找有效,而proc1()
则表示使用p1()
的类型转换直接与正常的重载函数一起使用。但是当我取消评论该行时:
decltype()
(请注意,演员也是使用proc1(s,(decltype(g))4.0);
而不是通过decltype()
模板直接完成的,并且涉及参数依赖查找。)查找失败:
Type
由于查找规则的某些复杂细节或仅仅是编译器错误导致失败吗?