コンパイラの警告 (レベル 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

関連項目

C++ の属性