/Zc:static_assert
(static_assert の厳格な処理)
/Zc:static_assert
コンパイラ オプションでは、クラスまたは関数テンプレートの解析時に、依存関係のないテスト式を使用して static_assert
呼び出しを評価するようにコンパイラに指示します。
構文
/Zc:static_assert
/Zc:static_assert-
解説
/Zc:static_assert
コンパイラ オプションでは、テスト式が依存していない場合に、最初の解析時に、関数テンプレートの本体またはクラス テンプレート メンバー関数の本体で static_assert
を評価するようにコンパイラに指示します。 非依存のテスト式が false
でない場合、コンパイラではすぐにエラーを出力します。 テスト式が依存している場合、テンプレートのインスタンスが作成されるまで static_assert
は評価されません。
/Zc:static_assert
オプションは、Visual Studio 2022 バージョン 17.1 以降で使用できます。 以前のバージョンの Visual Studio では、または /Zc:static_assert-
が指定されている場合は、static_assert
が関数テンプレートの本体またはクラス テンプレートのメンバー関数の本体内にあれば、Visual Studio では依存分析を行いません。 代わりに、テンプレートのインスタンスが作成されるときにのみ static_assert
が評価されます。
/permissive-
オプションでは /Zc:static_assert
が有効になるため、/std:c++20
または /std:c++latest
を使用するプロジェクトではデフォルトでオンになります。 /Zc:static_assert-
オプションは、コマンド ラインで /std:c++20
、/std:c++latest
、または /permissive-
オプションの後に指定する必要があります。
コンパイラが既定の C++14 モードになっていて、/permissive-
または /Zc:static_assert
が指定されている場合は、/Zc:static_assert
の動作が使用されます。 ただし、テンプレート本体で static_assert
を評価する場合は、既定でオフ警告 C5254 "言語機能 ' 簡潔な静的アサート ' にはコンパイラ フラグ '/std:c++17
' が必要です" も報告されます。この動作は C++17 までは必要ないためです。
このコンパイラ オプションを Visual Studio で使用するには
プロジェクトの [プロパティ ページ] ダイアログ ボックスを開きます。 詳細については、Visual Studio での C++ コンパイラとビルド プロパティの設定に関する記事を参照してください。
[構成プロパティ]>[C/C++]>[コマンド ライン] プロパティ ページを選択します。
/Zc:static_assert
または/Zc:static_assert-
を [追加オプション] ペインに追加します。