/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 で使用するには
プロジェクトの [プロパティ ページ] ダイアログ ボックスを開きます。 詳細については、Visual Studio での C++ コンパイラとビルド プロパティの設定に関する記事を参照してください。
[構成プロパティ]>[C/C++]>[コマンド ライン] プロパティ ページを選択します。
/Zc:externConstexpr
または/Zc:externConstexpr-
を [追加オプション] ペインに追加します。