How to enable C++17 compiling in Visual Studio?
C++Visual StudioCompilationC++17C++ Problem Overview
I want to use C++17 features.
How can I switch compiling from C++14 to C++17 in Microsoft Visual Studio?
Or it's not avaiable in release versions of VS?
C++ Solutions
Solution 1 - C++
There's now a drop down (at least since VS 2017.3.5) where you can specifically select C++17. The available options are (under project > Properties > C/C++ > Language > C++ Language Standard)
- ISO C++14 Standard. msvc command line option:
/std:c++14
- ISO C++17 Standard. msvc command line option:
/std:c++17
Visual Studio 2022 (MSVC C++20 and the /std:c++20 Switch - C++ Team Blog):
- ISO C++20 Standard. msvc command line option:
/std:c++20
Any Visual Studio:
- The latest draft standard. msvc command line option:
/std:c++latest
Solution 2 - C++
MSBuild (Visual Studio project/solution *.vcproj/*.sln):
Add to Additional options in Project Settings: /std:c++latest
to enable latest features - currently C++17 as of VS2017, VS2015 Update 3.
https://blogs.msdn.microsoft.com/vcblog/2016/06/07/standards-version-switches-in-the-compiler/
/permissive-
will disable non-standard C++ extensions and will enable standard conformance in VS2017.
https://blogs.msdn.microsoft.com/vcblog/2016/11/16/permissive-switch/
EDIT (Oct 2018): The latest VS2017 features are documented here:
https://docs.microsoft.com/en-gb/cpp/build/reference/std-specify-language-standard-version
VS2017 supports: /std:[c++14|c++17|c++latest]
now. These flags can be set via the project's property pages:
> To set this compiler option in the Visual Studio development > environment > > 1. Open the project's Property Pages dialog box. For details, see Working > with Project Properties. > 2. Select Configuration Properties, C/C++, > Language. > 3. In C++ Language Standard, choose the language standard to > support from the dropdown control, then choose OK or Apply to save > your changes.
CMake:
Visual Studio 2017 (15.7+) supports CMake projects. CMake makes it possible to enable modern C++ features in various ways. The most basic option is to enable a modern C++ standard by setting a target's property in CMakeLists.txt:
add_library (${PROJECT_NAME})
set_property (TARGET ${PROJECT_NAME}
PROPERTY
# Enable C++17 standard compliance
CXX_STANDARD 17
)
In the case of an interface library:
add_library (${PROJECT_NAME} INTERFACE)
target_compile_features (${PROJECT_NAME}
INTERFACE
# Enable C++17 standard compliance
cxx_std_17
)
Solution 3 - C++
Visual Studio 2015 Update 3 does not support the C++17 feature you are looking for (emplace_back()
returning a reference).
Support For C++11/14/17 Features (Modern C++)
C++11/14/17 Features In VS 2015 RTM
Solution 4 - C++
Visual studio 2019 version:
The drop down menu was moved to:
- Right click on project (not solution)
- Properties (or Alt + Enter)
- From the left menu select Configuration Properties
- General
- In the middle there is an option called "C++ Language Standard"
- Next to it is the drop down menu
- Here you can select Default, ISO C++ 14, 17 or latest
Solution 5 - C++
If bringing existing Visual Studio 2015 solution into Visual Studio 2017 and you want to build it with c++17 native compiler, you should first Retarget the solution/projects to v141 , THEN the dropdown will appear as described above ( Configuration Properties -> C/C++ -> Language -> Language Standard)
Solution 6 - C++
I configured it to c++17 in project properties, still I get the same issue of "There is no execution library". I am first time experimenting with C++17 parallel features. This is I am doing on window with visual studio 2017.
Solution 7 - C++
VS Code 2020 version
In tasks.json
file, (after you build and debug with the g++-9
)
Add -std=c++2a
for 2020 features (c++1z
for 2017 features).
Add -fconcepts
to use concept
keyword
"args": [
"-std=c++2a",
"-fconcepts",
"-g",
"${file}",
"-o",
"${fileDirname}/${fileBasenameNoExtension}"
],
now compile and you can use the 2020 features.