Предупреждение компилятора (уровень 4) C4347
Обновлен: Ноябрь 2007
Сообщение об ошибке
изменение поведения: "шаблон функции" вызывается вместо "функции".
behavior change: 'function template' is called instead of 'function'.
В Visual Studio .NET если существуют шаблонная и нешаблонная функция с одним и тем же именем, компилятор неправильно обрабатывает нешаблонную функцию как специализацию шаблонной функции.
Для кода, который корректно функционирует во всех версиях Visual C++, следует добавить template<> над нешаблонной функцией, в результате чего эта функция будет преобразована в действительную явную специализацию.
Дополнительные сведения см. в разделе Сводная информация о критических изменениях, которые могут приводить к ошибкам компиляции.
Данное предупреждение по умолчанию отключено. Дополнительные сведения см. в разделе Отключенные по умолчанию предупреждения компилятора.
Пример
Следующий пример демонстрирует причины возникновения ошибки C4347.
// C4347.cpp
// compile with: /W4 /EHsc
#pragma warning (default : 4347)
template <typename T>
void f(T t) { T i = t; i = 0; }
void f(int i) { i++; }
// OK
template <typename T>
void f2(T t) { T i = t; i = 0; }
template <>
void f2(int i) { i++; }
int main() {
f(5); // regular function call
f<int>(5); // C4347 calls implicit instantiation
f2(5);
f2<int>(5);
}