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