Предупреждение компилятора (уровень 4, выключен) C5240
Атрибут "attribute-string": атрибут игнорируется в этой синтаксической позиции
Замечания
Предупреждение C5240 возникает при [[nodiscard]]
обнаружении атрибута [[maybe_unused]]
в неправильной синтаксической позиции. Например, [[nodiscard]]
атрибут в этой синтаксической позиции применяется к decl-specifier-seq
функции, а не к функции f
:
static [[nodiscard]] int f() { return 1; }
Перед Visual Studio 2019 версии 16.10 компилятор автоматически игнорирует использование [[nodiscard]]
атрибута или [[maybe_unused]]
атрибута в синтаксической позиции, которая не применяется к объявленной функции или объекту. В Visual Studio 2019 версии 16.10 и более поздних версиях компилятор выдает предупреждение 4 уровня 4 по умолчанию C5240. Дополнительные сведения о включении этого предупреждения см . в предупреждениях компилятора, отключенных по умолчанию.
Пример
В следующем примере показано, как может произойти предупреждение 5240:
// 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
Чтобы устранить эту проблему, переместите атрибут в правильную синтаксическую позицию:
// 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