Ostrzeżenie kompilatora C5037

"member-function": definicja pozawierszowa elementu członkowskiego szablonu klasy nie może mieć argumentów domyślnych

Uwagi

Argumenty domyślne nie są dozwolone w definicjach poza wierszem funkcji składowych w klasach szablonów. Kompilator wyświetla ostrzeżenie poziomu 3 w obszarze /permissive, a błąd w obszarze /permissive-.

To ostrzeżenie zostało wprowadzone w programie Visual Studio 2017 w wersji 15.3. Kod kompilowany bez ostrzeżeń w wersjach kompilatora przed programem Visual Studio 2017 w wersji 15.3 może teraz wygenerować C5037. Aby uzyskać informacje na temat wyłączania ostrzeżeń wprowadzonych w określonej wersji kompilatora lub nowszej, zobacz Ostrzeżenia kompilatora według wersji kompilatora. Można ją wyłączyć przy użyciu opcji kompilatora /wd:5037 lub #pragma warning(disable:5037).

Przykład

W poprzednich wersjach programu Visual Studio następujący nieprawidłowo sformułowany kod może potencjalnie spowodować awarię środowiska uruchomieniowego. Program Visual Studio 2017 w wersji 15.3 generuje ostrzeżenie 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
{
    // ...
}

Aby naprawić błąd, usuń = false argument domyślny.