/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 で使用するには

  1. プロジェクトの [プロパティ ページ] ダイアログ ボックスを開きます。 詳細については、Visual Studio での C++ コンパイラとビルド プロパティの設定に関する記事を参照してください。

  2. [構成プロパティ]>[C/C++]>[コマンド ライン] プロパティ ページを選択します。

  3. /Zc:static_assert または /Zc:static_assert-[追加オプション] ペインに追加します。

関連項目

/Zc (準拠)