我有以下設置overlading參數推導:C++模板函數與常量參數
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,那麼編譯器試圖調用模板版本,因爲非模板的參數一個不匹配的類型我。在第二次調用中,調用非模板版本。我正在使用Microsoft C++編譯器版本10.此標準行爲?如果類型不完全匹配,即使它只有一個const修飾符,那麼模板函數被調用?
編輯:我知道這兩個函數沒有定義,我只是指出鏈接器抱怨什麼,以便更清楚編譯器想要調用什麼。
「無法解析的參考」是鏈接器告訴你,你*聲明*某事,但從未*定義*它。 – 2013-03-24 16:38:53
哪裏有功能模板的定義? – qPCR4vir 2013-03-24 16:40:45