Compilerwarnung C5037
'member-function': Eine out-of-line-Definition eines Elements einer Klassenvorlage darf keine Standardargumente haben.
Hinweise
Standardargumente sind in Out-of-Line-Definitionen von Memberfunktionen in Vorlagenklassen nicht zulässig. Der Compiler gibt eine Warnung der Ebene 3 unter /permissive
und einen Fehler unter /permissive-
.
Diese Warnung wurde in Visual Studio 2017, Version 15.3, eingeführt. Code, der ohne Warnungen in Versionen des Compilers kompiliert wurde, bevor Visual Studio 2017, Version 15.3, jetzt C5037 generieren kann. Informationen zum Deaktivieren von Warnungen, die in einer bestimmten Compilerversion oder höher eingeführt wurden, finden Sie unter Compilerwarnungen nach Compilerversion. Sie können es mithilfe der /wd:5037
Compileroption oder #pragma warning(disable:5037)
.
Beispiel
In früheren Versionen von Visual Studio konnte der folgende falsch formatierte Code einen Absturz zur Laufzeit verursachen. In Visual Studio 2017 Version 15.3 wird die Warnung C5037 generiert:
// 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
{
// ...
}
Entfernen Sie das Standardargument = false
, um den Fehler zu beheben.