Visual StudioでC ++ 17コンパイルを有効にする方法


120

C ++ 17の機能を使いたい。

Microsoft Visual StudioでコンパイルをC ++ 14からC ++ 17に切り替えるにはどうすればよいですか?

または、VSのリリースバージョンでは利用できませんか?


4
どのC ++ 17機能?Visual Studioのどのバージョンですか?あなたがC ++ 17について尋ねている場合は、なぜあなたは、あなたの質問にタグを付けたc++11c++14
ildjarn 2016

6
c ++ 17は利用できませんでした。C++の特定のバージョンに興味がある人は、C ++ 17を切り替える方法を知っていると思いました。たとえば、std :: vector.emplace_back()を使用して、新しく作成した要素への参照を返します。私はその+1行を知っており、その参照を得ていますが、とにかく私の質問への答えを知りたいのです。VS Community 2015(14.0.25431.01 Update 3)
Tudvari

おそらくここをチェックする必要があります:blogs.msdn.microsoft.com/visualstudio
Mikel F

3
VSで特定の言語方言を有効にすることはできません。それらが実装したものはすべて取得します。VS21015を使用している場合、C ++ 17に投票された標準ライブラリ機能でかなり幸運かもしれませんが、言語機能ではそれほどではありません。
Praetorian 2016

1
@preat MSVC 2017には「最新」の設定がありますが、まだリリースされていません。
Yakk-Adam Nevraumont 2016

回答:


161

ドロップダウンがあり(少なくともVS 2017.3.5以降)、ここで具体的にC ++ 17を選択できます。使用可能なオプションは次のとおりです(プロジェクト>プロパティ> C / C ++>言語> C ++言語標準)。

  • ISO C ++ 14標準。msvcコマンドラインオプション:/std:c++14
  • ISO C ++ 17標準。msvcコマンドラインオプション:/std:c++17
  • 最新のドラフト標準。msvcコマンドラインオプション:/std:c++latest

(たぶん、C ++ 20がリリースされ、Visual Studioでより完全にサポートされるようになると、/std:c++20


3
構文-std:c++14-std:c++17および-std:c++latest機能します。たとえば、手動でコンパイラオプションを入力する場合(VS2017でテスト済み)。
Roi Danton、

それはすでに答えから明らかではありませんか、または私がリスト-する/std:スイッチの代わりに具体的に意味しますか?
Johan Lundberg、

3
gccまたはから来たときにメリットがわかりclangます。そうすれ-ば、煩わしさが軽減されます(ただし、構文は(の:代わりに=)若干異なります)。
Roi Danton、

VS 2019でプロジェクトのプロパティを表示するには、[ソリューションエクスプローラー]に移動し、プロジェクトのタイトルを右クリックして[プロパティ]を選択します。次に、この投稿の指示に従います。
BabarBaig

1
@AndreiKrasutski。ISO C ++ 20はまだありませんが、/ std:c ++ latestで一部サポートされています。C ++ 20標準は来年予定されています。回答のコメントで編集しました。
Johan Lundberg、

31

MSBuild(Visual Studioプロジェクト/ソリューション* .vcproj / *。sln

プロジェクト設定の追加オプションに追加:/std:c++latest最新の機能を有効にします-現在、VS2017、VS2015 Update 3の時点でC ++ 17。

https://blogs.msdn.microsoft.com/vcblog/2016/06/07/standards-version-switches-in-the-compiler/

/permissive- 非標準のC ++拡張を無効にし、VS2017での標準への準拠を有効にします。

https://blogs.msdn.microsoft.com/vcblog/2016/11/16/permissive-switch/

編集(2018年10月): VS2017の最新の機能は次のとおりです。

https://docs.microsoft.com/en-gb/cpp/build/reference/std-specify-language-standard-version

VS2017がサポート:/std:[c++14|c++17|c++latest]現在。これらのフラグは、プロジェクトのプロパティページで設定できます。

Visual Studio開発環境でこのコンパイラオプションを設定するには

  1. プロジェクトの[プロパティページ]ダイアログボックスを開きます。詳細については、プロジェクトプロパティの操作を参照してください。
  2. 「構成プロパティー」、「C / C ++」、「言語」を選択します。
  3. C ++言語標準で、ドロップダウンコントロールからサポートする言語標準を選択し、[OK]または[適用]を選択して変更を保存します。

CMake

Visual Studio 2017(15.7以降)は、CMakeプロジェクトをサポートしています。CMakeは、さまざまな方法で最新のC ++機能を有効にすることを可能にします。最も基本的なオプションは、CMakeLists.txtでターゲットのプロパティを設定し、最新のC ++標準を有効にすることです。

add_library (${PROJECT_NAME})
set_property (TARGET ${PROJECT_NAME}
  PROPERTY
    # Enable C++17 standard compliance
    CXX_STANDARD 17
)

インターフェイスライブラリの場合:

add_library (${PROJECT_NAME} INTERFACE)
target_compile_features (${PROJECT_NAME}
  INTERFACE
    # Enable C++17 standard compliance
    cxx_std_17
)

私はVS2017でドロップダウンを行いましたが、それでもコンパイラはC ++ 98標準を適用し続けます。なんと言っても
Travis Su


5

既存のVisual Studio 2015ソリューションをVisual Studio 2017に組み込み、c ++ 17ネイティブコンパイラでビルドする場合は、最初にソリューション/プロジェクトをv141にリターゲットする必要があります。すると、上記のようにドロップダウンが表示されます(構成プロパティ-> C / C ++->言語->言語標準)


2

Visual Studio 2019バージョン:

ドロップダウンメニューが次の場所に移動されました。

  • プロジェクトを右クリックします(ソリューションではありません)
  • プロパティ(またはAlt + Enter)
  • 左側のメニューから[構成プロパティ]を選択します
  • 一般的な
  • 真ん中には「C ++言語標準」と呼ばれるオプションがあります
  • その隣にはドロップダウンメニューがあります
  • ここでは、デフォルト、ISO C ++ 14、17、または最新を選択できます
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.