我有以下设置:
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的类型不匹配。在第二次调用中,调用了非模板版本。我正在使用 Microsoft C++ 编译器版本 10。这是标准行为吗?如果类型不完全匹配,即使它只有一个 const 修饰符,那么调用模板函数?
编辑:我知道这两个函数没有定义,我只是指出链接器抱怨什么,以便更清楚编译器想要调用什么。