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