/Zc:__cplusplus (更新された __cplusplus マクロの有効化)

/Zc:__cplusplus コンパイラ オプションを指定すると、サポートされる最近の C++ 言語標準の更新値を通知する __cplusplus プリプロセッサ マクロが有効になります。 Visual Studio では、__cplusplus プリプロセッサ マクロに対して、既定で常に 199711L 値を返します。

構文

/Zc:__cplusplus[-]

解説

__cplusplus プリプロセッサ マクロは、特定のバージョンの C++ 標準をサポートしているかどうかを通知するために一般に使用されます。 既存のコードの多くは、このマクロの値が 199711L に一致することに依存しているようなので、明示的に /Zc:__cplusplus コンパイラ オプションの使用をオプトインしない限り、コンパイラでこのマクロの値は変更されません。 /Zc:__cplusplus オプションは、Visual Studio 2017 バージョン 15.7 以降で使用できます。既定ではオフになっています。 Visual Studio の以前のバージョンでは、既定で、または /Zc:__cplusplus- が指定されている場合、__cplusplus プリプロセッサ マクロに対して 199711L の値を返します。 /permissive- オプションでは、/Zc:__cplusplus は有効になりません。

/Zc:__cplusplus オプションが有効な場合、__cplusplus マクロで通知される値は、/std バージョンのスイッチ設定に依存します。 この表では、このマクロに可能な値を示します。

/Zc:__cplusplus オプション /std オプション __cplusplus
Zc:__cplusplus /std:c++14 (既定値) 201402L
Zc:__cplusplus /std:c++17 201703L
Zc:__cplusplus /std:c++20 202002L
Zc:__cplusplus /std:c++latest テキストを参照
Zc:__cplusplus- (無効) 任意の値 199711L
指定なし 任意の値 199711L

コンパイラでは、C++98、C++03 または C++11 の標準オプションをサポートしていません。 /std:c++20 オプションは、Visual Studio 2019 バージョン 16.11 以降で使用できます。 /std:c++latest オプションが指定された __cplusplus の値は、Visual Studio のバージョンに依存します。 お使いの Visual Studio のバージョンでサポートされている __cplusplus のサポートされている最も高い標準値よりも常に 1 以上大きい値である必要があります。

コンパイラのツールセットの変更をより細かく検出するには、定義済みの _MSC_VER マクロを使用します。 この組み込みのマクロの値は、Visual Studio 2017 以降のバージョンのツールセットが更新されるたびに増分されます。 _MSVC_LANG の定義済みのマクロでは、/Zc:__cplusplus オプションが有効でも無効でも、標準のバージョンを通知します。 /Zc:__cplusplus が有効な場合、__cplusplus の値は _MSVC_LANG と同じです。

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

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

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

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

関連項目

/Zc (準拠)
/std (言語の標準バージョンの指定)
定義済みマクロ