Aviso do compilador C5037
'member-function': uma definição fora de linha de um membro de um modelo de classe não pode ter argumentos padrão
Comentários
Os argumentos padrão não são permitidos em definições fora da linha de funções de membro em classes de modelo. O compilador emite um aviso de nível 3 em /permissive
e um erro em /permissive-
.
Esse aviso foi introduzido no Visual Studio 2017 versão 15.3. O código compilado sem avisos em versões do compilador antes do Visual Studio 2017 versão 15.3 agora pode gerar C5037. Para obter informações sobre como desabilitar avisos introduzidos em uma versão específica do compilador ou posterior, consulte avisos do compilador por versão do compilador. Você pode desabilitá-lo usando a /wd:5037
opção do compilador ou #pragma warning(disable:5037)
.
Exemplo
Nas versões anteriores do Visual Studio, o código malformado a seguir pode causar uma falha de runtime. O Visual Studio 2017 versão 15.3 produz o aviso 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
{
// ...
}
Para corrigir o erro, remova o argumento padrão = false
.