Compartilhar via


Aviso do compilador (nível 4, desativado) C5240

'attribute-string': o atributo foi ignorado nesta posição sintática

Comentários

O aviso C5240 ocorre quando um atributo [[nodiscard]] ou [[maybe_unused]] é encontrado na posição sintactica errada. Por exemplo, o atributo [[nodiscard]] nessa posição sintática aplica-se a decl-specifier-seq, não à função f:

static [[nodiscard]] int f() { return 1; }

Antes do Visual Studio 2019 versão 16.10, o compilador ignoraria silenciosamente os usos de um atributo [[nodiscard]] ou [[maybe_unused]] em uma posição sintática que não se aplicasse à função ou objeto que está sendo declarado. No Visual Studio 2019 versão 16.10 e posterior, em vez disso, o compilador emite um aviso C5240 de nível 4, desativado por padrão. Para obter mais informações sobre como habilitar esse aviso, confira Avisos do compilador desativados por padrão.

Exemplo

O seguinte exemplo mostra como o aviso 5240 pode ocorrer:

// c5240.cpp
// Compile using: cl /EHsc /W4 /std:c++17 /permissive- /c c5240.cpp
#pragma warning( default: 5240 )
static [[nodiscard]] int f() { return 1; }  // C5240

Para corrigir esse problema, mova o atributo para a posição sintática correta:

// c5240_fixed.cpp
// Compile using: cl /EHsc /W4 /std:c++17 /permissive- /c c5240_fixed.cpp
#pragma warning( default: 5240 )
[[nodiscard]] static int f() { return 1; }  // OK

Confira também

Atributos em C++