struct B{};
void bar(int){} // first overload
template <class T>
void foo(T t)
{
bar(2, t);
}
void bar(int, B){} // second overload
int main() {
foo(B{}); // works just fine, calls second overload
}
但如果依赖名称是成员函数的名称,那么这个原则不起作用:
struct B{};
struct A{
template <class T>
void foo(T t)
{
bar(2, t);
}
void bar(int){} // first overload
};
void bar(int, B){} // second overload
int main() {
A a;
a.foo(B{}); // gives error
}
为什么? 我想知道是否有人可以指出标准
的笔记答案 0 :(得分:0)
我在标准中发现了一个声明 3.4.2:
设X是由非限定查找生成的查找集,让Y为 由参数依赖查找生成的查找集。如果X包含:
类成员声明,或
块范围函数声明,它不是using声明,或
- 既不是函数也不是函数模板的声明
然后Y是空的。