コンパイラの警告 (レベル 4、オフ) C5240
'attribute-string': 属性はこの構文の位置では無視されます
解説
警告 C5240 は、誤った構文位置に属性[[maybe_unused]]
が見つかった場合[[nodiscard]]
に発生します。 たとえば、この構文位置の属性は[[nodiscard]]
、関数ではなく、次の要素f
に適用されますdecl-specifier-seq
。
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