コンパイラの警告 (レベル4、off) C5240
'attribute-string': 属性はこの構文の位置では無視されます
解説
警告 C5240 は、または [[maybe_unused]] 属性が間違った構文の位置で見つかった場合に [[nodiscard]] 発生します。 たとえば、次の構文位置の属性は [[nodiscard]] 、関数 f ではなく、 decl-specifier-seq に適用されます。
static [[nodiscard]] int f() { return 1; }
2019バージョン16.10 を Visual Studio する前に、コンパイラは、宣言されている関数またはオブジェクトに適用されていない構文の位置で、または [[maybe_unused]] 属性の [[nodiscard]] 使用を自動的に無視します。 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