私は次の設定をしています:
template <typename T>
void foo(T& t);
void foo(const int& t);
void f()
{
int i;
foo(i); //Unresolved reference to "void foo<int>(int &)"
foo(const_cast<const int&>(i)); //Unresolved reference to "void foo(int const &)"
}
fooの最初の呼び出しでは、非テンプレートの引数がiの型と一致しないため、コンパイラはテンプレートバージョンを呼び出そうとします。2番目の呼び出しでは、非テンプレートバージョンが呼び出されます。Microsoft C ++コンパイラバージョン10を使用しています。これは標準の動作ですか?型が完全に一致していない場合、const修飾子しかない場合でも、テンプレート関数が呼び出されますか?
編集:私はこれらの2つの関数に定義がないことを知っています。コンパイラーが何を呼び出したいかをより明確にするために、リンカーが何について不平を言っているかを指摘しているだけです。