У меня возникают следующие настройки:C++ шаблон функции overlading вывод аргумента с сопзЬ аргумент
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 &)"
}
В первом вызове обув, компилятор пытается вызвать версию шаблона, так как аргумент нешаблонном один не соответствует типу i. Во втором вызове вызывается версия без шаблона. Я использую компилятор Microsoft C++ версии 10. Является ли это стандартным поведением? Если тип не соответствует точно, даже если он имеет только константный модификатор, то вызывается функция шаблона?
EDIT: Я знаю, что эти две функции не имеют определения, я просто указываю, о чем жалуется компоновщик, чтобы сделать его более понятным, что компилятор хочет вызвать.
«Unresolved reference» - это то, как линкер говорит вам, что вы * объявили * что-то, но никогда не определили его. –
Где у вас есть определение шаблона функции? – qPCR4vir