编译器警告(等级 4,关闭)C5240
“attribute-string”:在此语法位置将忽略属性
备注
当在错误的语法位置找到 [[nodiscard]]
或 [[maybe_unused]]
特性时,会出现警告 C5240。 例如,此语法位置中的 [[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 级警告 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