次のコードでは、より具体的な 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 シナリオを説明する標準の関連領域を参照してください。
const あり: http://ideone.com/DIchLl
const なし: http://ideone.com/Iam4LV
const あり (1st): http://ideone.com/W6PoJw