Microsoft propose une compilation des fonctionnalités de C++ 17 dans la préversion Visual C++ 2017 version 15.3,
et indique celles qui sont à venir
La préversion Visual Studio 2017 version 15.3 est désormais disponible et s’accompagne d’une mise à jour des outils Visual C ++ (c'est-à-dire le compilateur, le linker et les bibliothèques). Comme Microsoft l’a fait pour les mises à jour VS 2015, l’entreprise a également ajouté des fonctionnalités C ++ 17 dans les mises à jour VS 2017 à une fréquence de publication similaire.
Contrairement aux mises à jour de VS 2015 (qui combinent l'IDE et les changements d'outils), l'EDI de VS 2017 est mis à jour plus fréquemment par des mises à jour mineures. Cette fois-ci, Microsoft a précisé qu’il s'agit de la première mise à jour du jeu d'outils (également appelée «mise à jour fondamentale»).
Voici une table de fonctionnalités compilées accompagnée de quelques notes. Dans cette table figurent également des fonctionnalités à venir qui seront disponibles dans la VS 2017.3 Preview 2 et sont marqués comme étant .
C ++ 03/11 Caractéristiques du langage de base
Statut
Référence document
Notes
[Tout le reste]
VS 2015
Recherche de nom en deux phases
Partiel
Expression SFINAE
Partiel
N2634
Préprocesseur C99
Partiel
N1653
Types entiers étendus
N/A
N1988
C ++ 14 Caractéristiques du langage de base
Statut
Référence de document
Notes
Éviter / répartir les allocations
N/A
N3664
Modification progressive des conversions contextuelles
VS 2013
N3323
Littéraux binaires
VS 2015
N3472
Types de retour auto et déclencheur (auto)
VS 2015
N3638
Captures initiales
VS 2015
N3648
Générique lambdas
VS 2015
N3649
Modèles variables
VS 2015.2
N3651
Extended constexpr
VS 2017
N3652
NSDMI pour agrégats
VS 2017
N3653
Attribut [[obsolète]]
VS 2015
N3760
Désaffectation dimensionnée
VS 2015
N3778
Séparateurs de chiffres
VS 2015
N3781
C ++ 17 Caractéristiques du langage de base
Statut
Référence de document
Notes
Nouvelles règles pour auto avec les listes de démarrage
VS 2015
N3922
static_assert
VS 2017
N3928
Typename dans le modèle template-parameters
VS 2015
N4051
Suppression de trigraphes
VS 2010
N4086
Définition de noms d'espace imbriqué
VS 2015.3
N4230
Correction des conversions de qualification
Non
N4261
Attributs pour les espaces de noms et les énumérateurs
VS 2015
N4266
U8 caractères littéraires
VS 2015
N4267
Autoriser plus de modèles non typés
Non
N4268
Fold Expressions
Non
N4295
Suppression de certains plis unaires vides
Non
P0036R0
Suppression du mot-clé du registre
VS 2017.3
P0001R1
Retrait de l'opérateur ++ pour bool
VS 2017.3
P0002R1
Ajout de l'option noexcept au système de type
Non
P0012R1
Initialisation agrégée étendue
Non
P0017R1
Capturer *this par valeur
VS 2017.3
P0018R3
__has_include
VS 2017.3
P0061R1
Reformuler les constructeurs héréditaires
Non
P0136R1
Liste directe des énumérations fixes à partir d'entiers
VS 2017.3
P0138R2
constexpr lambdas
VS 2017.3
P0170R1
Gamme généralisée pour les boucles
VS 2017
P0184R0
[] attribut
VS 2017
P0188R1
[] attribut
VS 2017.3
P0189R1
[] attribut
VS 2017.3
P0212R1
littéraux Hexfloat
Non
P0245R1
Utilisation des espaces de noms d'attributs sans répétition
VS 2017.3
P0028R4
Allocation de mémoire dynamique suralimentée
Non
P0035R4
Déduction d'argument de modèle pour les modèles de classe
Non
P0091R3
Déclaration de paramètres de modèle sans type avec auto
Non
P0127R2
Elision de copie garantie
VS 2017.3
P0135R1
Ordre d'évaluation de l'expression de raffinage
Non
P0145R3
Fixations structurées
VS 2017.3
P0217R3
Ignorer les attributs non reconnus
Non
P0283R2
constexpr if-statements
VS 2017.3
P0292R2
Déclarations de sélection avec les initialiseurs
VS 2017.3
P0305R1
Variables en ligne
Non
P0386R2
Correspondance des modèles-paramètres du modèle aux arguments compatibles
Non
P0522R0
Suppression des spécifications d'exception dynamiques
Non
P0003R5
Expansion des paquets dans les déclarations d'utilisation
Non
P0195R2
À l'exception des spécifications d'exception dynamiques, qui ont été obsolètes dans C ++ 11 et principalement supprimées dans C ++ 17. Notez que C ++ 17 18.4 [except.spec] / 2 indique "The noexcept-specifier throw () est obsolète (D.3) et équivalent à noexcept noexcept (true)." Mais VS 2017 version 15.3 preview Considère actuellement throw () comme équivalent à __declspec (nothrow).
Alors que la recherche de nom en deux phases n'est pas prise en charge dans la préversion VS 2017 version 15.3, l'équipe du compilateur effectue un travail majeur dans les coulisses. Pour la préversion 2, l'option / permissive-compilateur active le support partiel pour la recherche de nom en deux phases (une signification partielle d'environ 60% complète).
Bien que l'expression SFINAE soit partiellement prise en charge, elle est presque complète. Elle était suffisante pour STL dans VS 2015.2, et Expression SFINAE a reçu d'autres corrections de bogues pour des bibliothèques supplémentaires comme Boost. La déficience restante la plus importante est la nécessité d'utiliser des types d'étiquettes uniques lors de l'exécution de void_t / decltype Expression SFINAE.
Le support du préprocesseur C C99 est encore partiel dans le sens où les macros variadiques fonctionnent presque.
Les types entiers étendus sont autorisés, mais pas requis. Comme Clang et GCC, Microsoft a choisi de ne pas les implémenter.
Les allocations d'évitement / fusion sont autorisées, mais pas requises. Ici également Microsoft a choisi de ne pas les implémenter.
pris en charge sous / std: c ++ 14 avec "avertissement C4984: 'si constexpr' est une extension de langage C ++ 17". Cela permettra au STL (à l'avenir) d'utiliser "if constexpr" dans sa mise en œuvre.
Ces fonctionnalités sont toujours activées, même sous / std: c ++ 14.
Ces fonctionnalités ont été enregistrées et seront disponibles dans VS 2017.3 Preview 2.
Soutenez le club developpez.com en souscrivant un abonnement pour que nous puissions continuer à vous proposer des publications.