La norme C++14 ne sera qu'une modification mineure du langage, visant essentiellement à combler les défauts et les lacunes de la norme C++11 (avec tout de même quelques ajouts de fonctionnalités). Aussi ne contient-elle pas de modifications majeures du langage, pour lesquelles il faudra attendre C++17.
Le nouveau draft est consultable au format PDF sur isocpp.org : N3690.pdf.
Il a été approuvé lors du meeting de Bristol durant laquelle les membres du comité ont voté un à un les ajouts faits à ce CD (Committee Draft).
Les derniers ajouts votés sont notamment :
- les lambdas génériques (N3649) et la capture généralisée par move (N3648) qui viennent améliorer les lambdas déjà présentes en C++11 ;
- la déduction de type retour (N3638) qui permet de marquer le type de retour d'une fonction normale comme étant auto ;
- std::make_unique (N3656) à l'instar de std::make_shared introduit dans C++11 ;
- les std::dynarray et Runtime-Sized Arrays (N3662 et N3639) qui permettent de créer des tableaux dont la taille est fixée mais définie à l'exécution, contrairement à std::array et T a[11] qui sont entièrement fixés à la compilation ;
- les templates de variable (N3651) qui permettent par exemple de définir pi = 3.1415926535897932385 universellement pour tous les types ;
- std::optional (N3672) qui permet de représenter une valeur optionnelle ;
- des réductions des utilitaires de traits (N2655 - la partie 4 n'a pas été acceptée) qui permettront par exemple d'écrire std::remove_const_t<T> au lieu de std::remove_const<T>::type ;
- des user-defined literals dans la STL (N3642) tels que "hello world"s (qui sera une std::string) ou 23.5h (une std::chrono::hours);
- std::quoted (N3654) qui permet par exemple de récupérer depuis un flux "Le renard dit \"bonjour\" au corbeau" dans une seule std::string ;
- des contraintes moindres pour les fonctions constexpr (N3652) notamment l'utilisation possible de if et for ainsi que la déclaration de variables ; les fonctions constexpr ne sont plus implicitement const ;
- les std::shared_mutex (N3659) qui peuvent être bloquées soit de façon exclusive, soit de façon partagée ;
- std::exchange (N3668) qui à l'instar des std::atomic_exchange affecte une variable avec une nouvelle valeur et retourne l'ancienne valeur.
Et maintenant ? Le CD va maintenant passer au ballotage des NB (National Bodies, soit les représentants nationaux) qui durera trois mois.
Le prochain meeting aura lieu fin septembre à Chicago, où si tout se passe bien le CD deviendra un Draft International Standard (DIS), autrement dit le brouillon du prochain standard. Après le DIS vient le ballotage du JTC qui durera 5 mois, puis 2 mois supplémentaires si le ballotage est approuvé, ce qui conduit à la signature de l'International Standard (IS), prévue en été 2014. En cas d'échec lors d'une de ces étapes il sera nécessaire de produire un nouveau CD, ce qui repousse à fin 2014 voir plus loin la signature de l'IS final.
En parallèle se poursuivent les Technical Specifications (TS - filesystem, networking, concurrency, etc.) et les proposals pour C++1y qui sera cette fois une nouvelle version majeure du langage comme C++11 l'a été pour C++98.
Votre opinion
Suivez-vous avec intérêt l'évolution du C++ ?
Les ajouts votés vous paraissent-t-ils intéressants ?
Sources
isocpp.org - le draft C++14
isocpp.org - rapport du meeting
Commentaire de M. Wong
isocpp.org - ISO/IEC JTC1 Procedures