鉴于以下代码,为什么调用 Generic 函数而不是更具体的基于 SomeClass 的函数?
template <typename T>
class SomeClass
{
};
template <typename T>
void foo(T)
{
std::cout << "foo() Generic - Undesired function\n";
}
template <typename T>
void foo(const SomeClass<T>*)
{
std::cout << "foo() SomeClass<T> - Desired function\n";
}
int main()
{
SomeClass<char>* sc = new SomeClass<char>();
foo(sc);
return 0;
}
注意:如果我要从 " void foo(const SomeClass<T>*)
" 定义中删除 const,则会调用所需的函数。我也尝试过重新排列 foo,尽管它没有任何影响。如果可能的话,请一些人引用标准中描述此特定 ADL 场景的相关区域。
带常量:http: //ideone.com/DIchLl
没有常量:http: //ideone.com/Iam4LV
使用 const(第 1 次):http: //ideone.com/W6PoJw