¿Cómo habilitar la compilación de C ++ 17 en Visual Studio?

120

Quiero usar las funciones de C ++ 17.

¿Cómo puedo cambiar la compilación de C ++ 14 a C ++ 17 en Microsoft Visual Studio?

¿O no está disponible en las versiones de lanzamiento de VS?

Tudvari
fuente
4
¿Qué características de C ++ 17? ¿Qué versión de Visual Studio? Si está preguntando sobre C ++ 17, ¿por qué etiquetó su pregunta c++11y c++14?
ildjarn
6
c ++ 17 no estaba disponible, y pensé que aquellos que estén interesados ​​en versiones específicas de C ++ saben mejor cómo cambiarlo. Por ejemplo, quiero que std :: vector.emplace_back () devuelva una referencia al elemento recién creado. Conozco esa línea +1 y obtengo esa referencia, pero de todos modos me gustaría saber la respuesta a mi pregunta. VS Community 2015 (14.0.25431.01 Actualización 3)
Tudvari
Probablemente debería consultar aquí: blogs.msdn.microsoft.com/visualstudio
Mikel F
3
No puede habilitar dialectos de idiomas específicos en VS, obtiene lo que sea que hayan implementado. Es posible que tenga bastante suerte con las características de la biblioteca estándar votadas en C ++ 17 si está usando VS21015, pero no tanto con las características del lenguaje.
Pretoriano
1
@preat MSVC 2017 tiene una configuración "más reciente", pero aún no se ha publicado.
Yakk - Adam Nevraumont

Respuestas:

162

Ahora hay un menú desplegable (al menos desde VS 2017.3.5) donde puede seleccionar específicamente C ++ 17. Las opciones disponibles son (en proyecto> Propiedades> C / C ++> Lenguaje> Estándar de lenguaje C ++)

  • Estándar ISO C ++ 14. Opción de línea de comando msvc:/std:c++14
  • Estándar ISO C ++ 17. Opción de línea de comando msvc:/std:c++17
  • El último borrador de estándar. Opción de línea de comando msvc:/std:c++latest

(Apuesto a que una vez que C ++ 20 esté disponible y sea más compatible con Visual Studio, lo será /std:c++20)

Johan Lundberg
fuente
3
La sintaxis -std:c++14, -std:c++17y -std:c++latesttambién funciona, por ejemplo, cuando prefiere ingresar manualmente las opciones del compilador (probado con VS2017).
Roi Danton
¿No está claro por la respuesta ya, o se refiere específicamente a -los /std:interruptores que enumero?
Johan Lundberg
3
Veo el beneficio cuando vengo de gcco clang. Entonces -es menos intrusivo (sin embargo, la sintaxis aún difiere ligeramente (en :lugar de =)).
Roi Danton
En VS 2019, para llegar a Propiedades del proyecto, vaya a "Explorador de soluciones", haga clic con el botón derecho en el título del proyecto y seleccione Propiedades. Luego siga las instrucciones de esta publicación.
BabarBaig
1
@AndreiKrasutski. Todavía no hay ISO C ++ 20, pero hay algo de soporte en / std: c ++ más reciente. El estándar C ++ 20 se espera el próximo año. Edité en un comentario en mi respuesta.
Johan Lundberg
31

MSBuild (proyecto / solución de Visual Studio * .vcproj / *. Sln ) :

Agregar a opciones adicionales en Configuración del proyecto: /std:c++latestpara habilitar las funciones más recientes, actualmente C ++ 17 a partir de VS2017, VS2015 Update 3.

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

/permissive- deshabilitará las extensiones de C ++ no estándar y habilitará la conformidad estándar en VS2017.

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

EDITAR (octubre de 2018): Las últimas características de VS2017 están documentadas aquí:

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

VS2017 admite: /std:[c++14|c++17|c++latest]ahora. Estas banderas se pueden configurar a través de las páginas de propiedades del proyecto:

Para configurar esta opción del compilador en el entorno de desarrollo de Visual Studio

  1. Abra el cuadro de diálogo Páginas de propiedades del proyecto. Para obtener más información, consulte Trabajar con propiedades del proyecto.
  2. Seleccione Propiedades de configuración, C / C ++, Idioma.
  3. En C ++ Language Standard, elija el estándar de idioma para admitir desde el control desplegable, luego elija Aceptar o Aplicar para guardar los cambios.

CMake :

Visual Studio 2017 (15.7+) admite proyectos de CMake. CMake hace posible habilitar las características modernas de C ++ de varias formas. La opción más básica es habilitar un estándar C ++ moderno estableciendo la propiedad de un objetivo en CMakeLists.txt:

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

En el caso de una biblioteca de interfaz:

add_library (${PROJECT_NAME} INTERFACE)
target_compile_features (${PROJECT_NAME}
  INTERFACE
    # Enable C++17 standard compliance
    cxx_std_17
)
Zingam
fuente
Hice el menú desplegable en mi VS2017 pero aún así el compilador sigue aplicando el estándar C ++ 98, qué diablos
Travis Su
5

Si trae la solución de Visual Studio 2015 existente a Visual Studio 2017 y desea compilarla con el compilador nativo de c ++ 17, primero debe Reorientar la solución / proyectos a v141, ENTONCES el menú desplegable aparecerá como se describe arriba (Propiedades de configuración -> C / C ++ -> Idioma -> Estándar de idioma)

WilliamClements
fuente
2

Versión de Visual Studio 2019:

El menú desplegable se movió a:

  • Haga clic derecho en el proyecto (no en la solución)
  • Propiedades (o Alt + Enter)
  • En el menú de la izquierda, seleccione Propiedades de configuración
  • General
  • En el medio hay una opción llamada "Estándar del lenguaje C ++"
  • Junto a él está el menú desplegable
  • Aquí puede seleccionar Predeterminado, ISO C ++ 14, 17 o más reciente
sanitizedUser
fuente