Partager via


Avertissement du compilateur C5037

« member-function » : une définition hors ligne d’un membre d’un modèle de classe ne peut pas avoir d’arguments par défaut

Notes

Les arguments par défaut ne sont pas autorisés sur les définitions hors ligne des fonctions membres dans les classes de modèles. Le compilateur émet un avertissement de niveau 3 sous /permissive, et une erreur sous /permissive-.

Cet avertissement a été introduit dans Visual Studio 2017 version 15.3. Le code compilé sans avertissements dans les versions du compilateur avant Visual Studio 2017 version 15.3 peut désormais générer C5037. Pour plus d’informations sur la désactivation des avertissements introduits dans une version particulière du compilateur ou une version ultérieure, consultez avertissements du compilateur par version du compilateur. Vous pouvez le désactiver à l’aide de l’option du /wd:5037 compilateur ou #pragma warning(disable:5037).

Exemple

Dans les versions précédentes de Visual Studio, le code incorrect suivant peut entraîner un incident lors de l’exécution. Visual Studio 2017 version 15.3 génère l’avertissement C5037 :

// C5037.cpp
// compile using: cl /c /permissive- C5037.cpp
template <typename T>
struct A {
    T f(T t, bool b = false);
};

template <typename T>
T A<T>::f(T t, bool b = false) // C5037: 'A<T>::f': an out-of-line definition of a member of a class template cannot have default arguments
{
    // ...
}

Pour corriger cette erreur, supprimez l’argument par défaut = false.