次のようなテンプレート化された関数のオーバーロードが 2 つある場合:
template<class T>
void foo( T const& )
{
// do something with a const reference
cout << "const reference version";
}
template<class T>
void foo( T const* )
{
// do something with a const pointer
cout << "const pointer version";
}
非 const ポインター型でインスタンス化されたときにコンパイラーが最初のバージョンを選択するのはなぜですか?
int* bar;
foo( bar ); // prints "const reference version"
char const* baz;
foo( baz ); // prints "const pointer version"