Comment activer la compilation C ++ 17 dans Visual Studio?

120

Je souhaite utiliser les fonctionnalités de C ++ 17.

Comment puis-je passer de la compilation de C ++ 14 à C ++ 17 dans Microsoft Visual Studio?

Ou ce n'est pas disponible dans les versions de version de VS?

Tudvari
la source
4
Quelles fonctionnalités C ++ 17? Quelle version de Visual Studio? Si vous posez des questions sur C ++ 17, pourquoi avez-vous étiqueté votre question c++11et c++14?
ildjarn
6
c ++ 17 n'était pas disponible, et je pensais que ceux qui sont intéressés par des versions spécifiques de C ++ savent mieux comment le changer. Par exemple, je veux que std :: vector.emplace_back () renvoie une référence à l'élément nouvellement créé. Je connais cette ligne +1, et j'obtiens cette référence, mais j'aimerais quand même connaître la réponse à ma question. VS Community 2015 (14.0.25431.01 Update 3)
Tudvari
Vous devriez probablement vérifier ici: blogs.msdn.microsoft.com/visualstudio
Mikel F
3
Vous ne pouvez pas activer des dialectes de langue spécifiques dans VS, vous obtenez tout ce qu'ils ont implémenté. Vous pourriez avoir de la chance avec les fonctionnalités de bibliothèque standard votées dans C ++ 17 si vous utilisez VS21015, mais pas tellement avec les fonctionnalités de langage.
Prétorien
1
@preat MSVC 2017 a un paramètre "dernier", mais qui n'est pas encore publié.
Yakk - Adam Nevraumont

Réponses:

162

Il existe maintenant une liste déroulante (au moins depuis VS 2017.3.5) où vous pouvez sélectionner spécifiquement C ++ 17. Les options disponibles sont (sous projet> Propriétés> C / C ++> Langage> Standard du langage C ++)

  • Norme ISO C ++ 14. Option de ligne de commande msvc:/std:c++14
  • Norme ISO C ++ 17. Option de ligne de commande msvc:/std:c++17
  • Le dernier projet de norme. Option de ligne de commande msvc:/std:c++latest

(Je parie qu'une fois C ++ 20 sorti et plus entièrement pris en charge par Visual Studio, il le sera /std:c++20)

Johan Lundberg
la source
3
La syntaxe -std:c++14, -std:c++17et -std:c++latestfonctionne également, par exemple lorsque vous préférez saisir manuellement les options compilateur (testé avec VS2017).
Roi Danton
N'est-ce pas déjà clair dans la réponse, ou voulez-vous dire spécifiquement -au lieu des /std:commutateurs que je liste?
Johan Lundberg
3
Je vois l'avantage en venant de gccou clang. Ensuite, le -est moins intrusif (cependant la syntaxe diffère encore légèrement ( :au lieu de =)).
Roi Danton
Dans VS 2019, pour accéder aux propriétés du projet, accédez à «Explorateur de solutions», cliquez avec le bouton droit sur le titre du projet et sélectionnez Propriétés. Suivez ensuite les instructions de ce post.
BabarBaig
1
@AndreiKrasutski. Il n'y a pas encore d'ISO C ++ 20 mais un certain support dans / std: c ++ latest. La norme C ++ 20 est attendue l'année prochaine. J'ai édité dans un commentaire dans ma réponse.
Johan Lundberg
31

MSBuild (projet / solution Visual Studio * .vcproj / *. Sln ) :

Ajouter aux options supplémentaires dans les paramètres du projet: /std:c++latestpour activer les dernières fonctionnalités - actuellement C ++ 17 à partir de VS2017, VS2015 Update 3.

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

/permissive- désactivera les extensions C ++ non standard et activera la conformité standard dans VS2017.

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

EDIT (octobre 2018): Les dernières fonctionnalités de VS2017 sont documentées ici:

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

VS2017 prend en charge: /std:[c++14|c++17|c++latest]maintenant. Ces indicateurs peuvent être définis via les pages de propriétés du projet:

Pour définir cette option du compilateur dans l'environnement de développement Visual Studio

  1. Ouvrez la boîte de dialogue Pages de propriétés du projet. Pour plus d'informations, consultez Utilisation des propriétés de projet.
  2. Sélectionnez Propriétés de configuration, C / C ++, Langage.
  3. Dans C ++ Language Standard, choisissez la norme de langage à prendre en charge dans le contrôle déroulant, puis choisissez OK ou Apply pour enregistrer vos modifications.

CMake :

Visual Studio 2017 (15.7+) prend en charge les projets CMake. CMake permet d'activer les fonctionnalités C ++ modernes de différentes manières. L'option la plus basique consiste à activer une norme C ++ moderne en définissant la propriété d'une cible dans CMakeLists.txt:

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

Dans le cas d'une bibliothèque d'interface:

add_library (${PROJECT_NAME} INTERFACE)
target_compile_features (${PROJECT_NAME}
  INTERFACE
    # Enable C++17 standard compliance
    cxx_std_17
)
Zingam
la source
J'ai fait la liste déroulante dans mon VS2017 mais le compilateur continue d'appliquer la norme C ++ 98, qu'est-ce que le diable
Travis Su
5

Si vous apportez la solution Visual Studio 2015 existante dans Visual Studio 2017 et que vous souhaitez la générer avec le compilateur natif c ++ 17, vous devez d'abord recibler la solution / les projets vers la v141, ALORS la liste déroulante apparaîtra comme décrit ci-dessus (Propriétés de configuration -> C / C ++ -> Language -> Language Standard)

WilliamClements
la source
2

Version Visual Studio 2019:

Le menu déroulant a été déplacé vers:

  • Faites un clic droit sur le projet (pas la solution)
  • Propriétés (ou Alt + Entrée)
  • Dans le menu de gauche, sélectionnez Propriétés de configuration
  • Général
  • Au milieu, il y a une option appelée "C ++ Language Standard"
  • À côté se trouve le menu déroulant
  • Ici, vous pouvez sélectionner Par défaut, ISO C ++ 14, 17 ou plus récent
utilisateur désinfecté
la source