/Zc:externConstexpr (外部 constexpr 変数の有効化)

/Zc:externConstexpr コンパイラ オプションを指定すると、C++ 標準に準拠し、constexpr 変数の外部リンケージを許可するようコンパイラに指示が出されます。 既定では、extern キーワードを指定した場合でも、Visual Studio で常に constexpr 変数の内部リンケージが設定されます。

構文

/Zc:externConstexpr[-]

解説

/Zc:externConstexpr コンパイラ オプションを指定すると、コンパイラで extern constexpr が使用され、宣言された変数に外部リンケージが適用されます。

以前のバージョンの Visual Studio では、既定で、または/Zc:externConstexpr-が指定されている場合、extern キーワードが使用されている場合でも、Visual Studio はconstexpr変数に内部リンケージを適用します。 /Zc:externConstexpr オプションは、Visual Studio 2017 Update 15.6 以降で使用できます。 既定では無効になっています。

Visual Studio 2022 Update 17.6 の時点で、 /permissive- オプションを使用すると、 /Zc:externConstexpr/Zc:lambdaの両方が有効になります。 以前のバージョンでは、 /permissive- はどちらも有効にしませんでした。

ヘッダー ファイルに extern constexpr を宣言した変数が含まれている場合、重複した宣言をリンクされたバイナリの単一インスタンス内にマージするには、__declspec(selectany) とマークされている必要があります。 そうしないと、単一定義規則違反により、リンカー エラー (例: LNK2005) が表示されることがあります。

このコンパイラ オプションを Visual Studio で使用するには

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

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

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

関連項目

auto キーワード
permissive
/Zc (準拠)