Condividi tramite


Avviso del compilatore C5037

'member-function': una definizione out-of-line di un membro di un modello di classe non può avere argomenti predefiniti

Osservazioni:

Gli argomenti predefiniti non sono consentiti nelle definizioni out-of-line di funzioni membro presenti in classi modello. Il compilatore genera un avviso di livello 3 in /permissivee un errore in /permissive-.

Questo avviso è stato introdotto in Visual Studio 2017 versione 15.3. Il codice compilato senza avvisi nelle versioni del compilatore prima di Visual Studio 2017 versione 15.3 può ora generare C5037. Per informazioni su come disabilitare gli avvisi introdotti in una determinata versione del compilatore o versioni successive, vedere Avvisi del compilatore per versione del compilatore. È possibile disabilitarla usando l'opzione del /wd:5037 compilatore o #pragma warning(disable:5037).

Esempio

Nelle versioni precedenti di Visual Studio, il codice non valido seguente poteva causare potenzialmente un arresto anomalo in fase di runtime. Visual Studio 2017 versione 15.3 genera l'avviso 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
{
    // ...
}

Per correggere l'errore, rimuovere l'argomento predefinito = false.