Partager via


Avertissement du compilateur (niveau 4) C4347

Mise à jour : novembre 2007

Message d'erreur

changement de comportement : 'modèle de fonction' est appelé à la place de 'fonction'
behavior change: 'function template' is called instead of 'function'

Dans Visual Studio .NET, si vous aviez une fonction de modèle et une fonction non basée sur un modèle portant le même nom que la fonction de modèle, le compilateur traitait de façon erronée la fonction non basée sur un modèle comme une spécialisation de la fonction de modèle.

Pour obtenir un code qui fonctionne de la même manière dans toutes les versions de Visual C++, ajoutez template<> au-dessus de la fonction non basée sur un modèle, pour en faire une réelle spécialisation explicite.

Pour plus d'informations, consultez Récapitulatif des modifications sans rupture au moment de la compilation.

Cet avertissement est désactivé par défaut. Pour plus d'informations, consultez Avertissements du compilateur désactivés par défaut.

Exemple

L'exemple suivant génère l'erreur 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);
}