コンパイラの警告 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";
}
}