Advertencia del compilador (nivel 4) C4347

Actualización: noviembre 2007

Mensaje de error

cambio de comportamiento: se llamó a 'plantilla de función' en lugar de a 'función'
behavior change: 'function template' is called instead of 'function'

En Visual Studio .NET, si existe una función de plantilla y una función que no es de plantilla con el mismo nombre, el compilador tratará incorrectamente la segunda como una especialización de la primera.

Para que el código funcione de igual forma en todas las versiones de Visual C++, agregue template<> antes de la función que no es de plantilla para convertirla en una especialización explícita real.

Para obtener más información, vea Resumen de cambios importantes en tiempo de compilación.

De forma predeterminada, esta advertencia está desactivada. Para obtener más información, vea Advertencias del compilador desactivadas de forma predeterminada.

Ejemplo

El ejemplo siguiente genera el error 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);
}