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

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

構文

/Zc:externConstexpr[-]

解説

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

以前のバージョンの Visual Studio では、既定で、または指定されている場合/Zc:externConstexpr-は、キーワード (keyword)が使用されている場合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 (準拠)