コンパイラの警告 C4984

'if constexpr' は C++17 言語の拡張機能です

解説

コンパイラが、既定の C++14 標準を使用してコンパイルされたコード内で、if constexpr 式を見つけました。 この式は、C++17 標準以降で指定されています。 C++11 または C++14 互換性が必要な場合、この式は移植可能です。

C4984 は既定でエラーとして発行されますが、非表示にできます。 ご自身のコードを C++17 としてコンパイルしてこの式を有効にするには、/std:c++17 モード以降を使用します。 C++14 用にコンパイルされたコードで if constexpr 式を Microsoft 拡張機能として使用できるように、エラー メッセージの警告レベルを非表示または無効にしたり、変更したりできます。 /wd4984 を使用しすると C4984 を無効にできます。また、/wN4984 を使用すると、それをエラーではなく、レベル N 警告として有効にすることができます。 または、お使いのソース ファイル内で警告の原因となる行の前にある #pragma warning(suppress:4984) を使用します。

この警告は、Visual Studio 2017 バージョン 15.3 以降で使用できます。 特定のコンパイラ バージョン以降で導入された警告を無効にする方法については、「コンパイラのバージョン別のコンパイラの警告」 を参照してください。

このサンプルは C4984 を生成し、それを修正する方法を示しています。

// C4984.cpp
// compile with: cl /EHsc C4984.cpp
#include <iostream>

int main()
{
    constexpr bool compile_time = true;
    // Uncomment the following line or use /std:c++17 to fix
    // #pragma warning(suppress:4984)
    if constexpr (compile_time)
    {
        std::cout << "compile_time is true";
    }
    else
    {
        std::cout << "compile_time is false";
    }
}