URL: https://linuxfr.org/news/les-coulisses-du-standard-cpp Title: Les coulisses du standard C++ Authors: Oliver Davy Defaud, BenoĂźt Sibaud, ZeroHeure, bubarđŠ„, M5oul et Anthony Jaguenaud Date: 2016ćčŽ08æ08æ„T09:10:16+02:00 License: CC By-SA Tags: c++, c++17, c++14, c++11, c++98, c++03 et fortran Score: 99 Le C++ a bientĂŽt la quarantaine et pourtant trĂšs actif en ce moment avec la finalisation de la prochaine version C++17. Profitonsâen pour faire le point avec une sĂ©rie dâarticles sur le C++. Cette premiĂšre dĂ©pĂȘche nous dĂ©voile la face cachĂ©e du C++, et donc peut intĂ©resser tous les lecteurs _LinuxFr.org_. :-)  ---- [Contenu Markdown de cette dĂ©pĂȘche sur le dĂ©pĂŽt Git du C++FRUG](https://github.com/cpp-frug/materials/blob/gh-pages/news/2016_n1_Coulisses-du-standard.md) [Contenu Markdown de la deuxiĂšme dĂ©pĂȘche : C++17 â GenĂšse dâune version mineure](https://github.com/cpp-frug/materials/blob/gh-pages/news/2016_n2_Cpp17_Genese-d-une-version-mineure.md) [Contenu Markdown de la troisiĂšme dĂ©pĂȘche : C++17 â NouveautĂ©s au niveau du langage](https://github.com/cpp-frug/materials/blob/gh-pages/news/2016_n3_Cpp17_Nouveautes-du-langage.md) [Contenu Markdown de la quatriĂšme dĂ©pĂȘche : C++17 â NouveautĂ©s au niveau de la bibliothĂšque standard](https://github.com/cpp-frug/materials/blob/gh-pages/news/2016_n4_Cpp17_Nouveautes-de-la-bibliotheque.md) [Contenu Markdown de la cinquiĂšme dĂ©pĂȘche : Bilan C++17 et attentes C++20](https://github.com/cpp-frug/materials/blob/gh-pages/news/2016_n5_Bilan-Cpp17-et-attentes-Cpp20.md) [Article WikipĂ©dia C++](https://fr.wikipedia.org/wiki/C%2B%2B) [Site officiel du comitĂ© de normalisation du C++ â Page expliquant le fonctionnement du comitĂ©](https://isocpp.org/std/) [DĂ©pĂŽt Git officiel du standard C++ en cours de rĂ©daction](https://github.com/cplusplus/draft/) [CppReference, wiki libre (CC-BY SA 3.0 et GFDL) pour la documentation C et C++](http://fr.cppreference.com/w/Accueil) [DĂ©pĂȘche 2012 par nazcafan : Codeurs, traducteurs, CppReference a besoin de vous](https://linuxfr.org/news/codeurs-traducteurs-cppreference-a-besoin-de-vous) [Journal 2016 par serge_sans_paille : [C++14 ] Expressions template pour les nuls](https://linuxfr.org/users/serge_ss_paille/journaux/c-14-expressions-template-pour-les-nuls) ----  DĂ©pĂȘches C++ ============ ChĂšre lectrice, cher lecteur de _LinuxFr.org_. Tes collĂšgues sont en vacances et tu cherches Ă tâoccuper ? Ou alors, tu es en vacances et lâactualitĂ© informatique te manque dĂ©jĂ ? Eh bien, voici une premiĂšre dĂ©pĂȘche dâune longue sĂ©rie sur le C++. Ainsi, tu seras en avance technologique dĂšs la rentrĂ©e. RĂ©sumĂ© des dĂ©pĂȘches : 1. Cette premiĂšre dĂ©pĂȘche, [_Les coulisses du C++_](https://github.com/cpp-frug/materials/blob/gh-pages/news/2016-08_n1_Les-coulisses-du-standard.md), prĂ©sente la naissance du langage, puis du standard, sa spĂ©cification non libre, [payant](http://www.iso.org/iso/home/store/catalogue_tc/catalogue_detail.htm?csnumber=64029), [ouvert](https://fr.wikipedia.org/wiki/Format_ouvert), dĂ©laissĂ© au profit de son [brouillon](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2014/n4296.pdf) _(draft)_, peu lu par les dĂ©veloppeurs C++, Ă©voluant lentement mais sĂ»rement... 2. La deuxiĂšme dĂ©pĂȘche, [_GenĂšse du C++17_](https://github.com/cpp-frug/materials/blob/gh-pages/news/2016-08_n2_Cpp17_Genese-d-une-version-mineure.md), reviendra sur les derniĂšres rĂ©unions du comitĂ© de normalisation. 3. La troisiĂšme dĂ©pĂȘche, [_NouveautĂ©s C++17 du langage_](https://github.com/cpp-frug/materials/blob/gh-pages/news/2016-08_n3_Cpp17_Nouveautes-du-langage.md), prĂ©sentera des changements du langage trĂšs intĂ©ressants : [dĂ©duction des arguments `template`](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/p0091r2.html) `std::array a{1,2,3};`, [dĂ©composition du retour de fonction](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/p0217r2.html) `auto [x, y] = f();` , [`namespace aa::bb{}`](http://en.cppreference.com/w/cpp/language/namespace) Ă©quivalent Ă `namespace aa{ namespace bb{}}`, [`if constexpr`](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/p0128r1.html) sĂ©lectionne du code Ă la compilation, lambda `constexpr`, lambda capture `*this`, [`if(init;condition)`](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/p0305r0.html) comme `for(init;cond;inc)`, [variables `inline`](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/p0386r0.pdf)... Mais il faudra encore attendre pour lâintĂ©gration des [Concepts](http://fr.cppreference.com/w/cpp/concept), [Modules](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/p0142r0.pdf), [Syntaxe dâappel uniforme](https://en.wikipedia.org/wiki/Uniform_Function_Call_Syntax#C.2B.2B_proposal) et [RĂ©flexion](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/p0194r1.html). 4. La quatriĂšme dĂ©pĂȘche, [_NouveautĂ©s C++17 de la bibliothĂšque standard_](https://github.com/cpp-frug/materials/blob/gh-pages/news/2016-08_n4_Cpp17_Nouveautes-de-la-bibliotheque.md), prĂ©sentera les changements au niveau de la bibliothĂšque standard qui pourraient bousculer notre petite vie de dĂ©veloppeur : [algorithmes parallĂ©lisĂ©s](http://en.cppreference.com/w/cpp/experimental/parallelism#Parallelized_versions_of_existing_algorithms), [`std::string_view`](http://en.cppreference.com/w/cpp/string/basic_string_view), [`std::filesystem`](http://en.cppreference.com/w/cpp/filesystem), [`std::variant`](http://en.cppreference.com/w/cpp/utility/variant), [`std::any`](http://en.cppreference.com/w/cpp/utility/any), [`std::optional`](http://en.cppreference.com/w/cpp/utility/optional), les [fonctions spĂ©ciales mathĂ©matiques](http://en.cppreference.com/w/cpp/numeric/special_math)... Mais, les [intervalles (_ranges_)](http://open-std.org/JTC1/SC22/WG21/docs/papers/2016/n4569.pdf), le [rĂ©seau (_networking_)](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/n4588.pdf) seront intĂ©grĂ©s pour une version ultĂ©rieure. 5. [_Bilan C++17 et attentes pour C++20_](https://github.com/cpp-frug/materials/blob/gh-pages/news/2016_n5_Bilan-Cpp17-et-attentes-Cpp20.md). Version mineure ou majeure ? Dâun cĂŽtĂ©, les amĂ©liorations sont nombreuses et apprĂ©ciables. Mais de lâautre, aucune fonctionnalitĂ© majeure nâest intĂ©grĂ©e, exceptĂ©es celles qui sont dĂ©jĂ disponibles dans [Boost](https://fr.wikipedia.org/wiki/Boost_(biblioth%C3%A8ques)) (donc dĂ©jĂ supportĂ©es par un large panel dâanciens compilateurs). ConsĂ©quences sur le processus de normalisation ? Quâattendre de C++20 ? IntĂ©rĂȘt du C++ aujourdâhui ? Et les langages alternatifs ? Comment sâimpliquer ? 6. ... dâautres dĂ©pĂȘches Ă venir. :-) [![Logo C++FRUG reprĂ©sentĂ© par un gros "C++" au centre du cercle de la Francophonie][logoCppFRUG]][logoCppFRUG_WP] [logoCppFRUG]: http://upload.wikimedia.org/wikipedia/commons/9/91/Cpp-Francophonie.svg [logoCppFRUG_WP]: http://commons.wikimedia.org/wiki/File:Cpp-Francophonie.svg Partage ======= ChĂšre lectrice, cher lecteur _LinuxFr.org_. Tu souhaites donner un coup de main pour les dĂ©pĂȘches suivantes ? Rejoinsânous dans lâ[espace de rĂ©daction collaborative sur _LinuxFr.org_](https://linuxfr.org/redaction). Un [compte](https://linuxfr.org/compte/inscription) est nĂ©cessaire pour y accĂ©der. AprĂšs publication, les dĂ©pĂȘches sont figĂ©es sur _LinuxFr.org_. Alors, pour continuer Ă amĂ©liorer ce contenu libre (fĂŽtes, oublis, franglais, maladresses...), nâhĂ©site Ă pas Ă aller sur le dĂ©pĂŽt [Git C++FRUG](https://github.com/cpp-frug/materials/blob/gh-pages/Cxx17). Câest lĂ aussi que tu trouveras les versions de ces dĂ©pĂȘches les plus Ă jour : 1. [_Les coulisses du standard C++_](https://github.com/cpp-frug/materials/blob/gh-pages/news/2016_n1_Coulisses-du-standard.md) ; 2. [_GenĂšse dâune version mineure_](https://github.com/cpp-frug/materials/blob/gh-pages/news/2016_n2_Cpp17_Genese-d-une-version-mineure.md) ; 3. [_NouveautĂ©s du langage_](https://github.com/cpp-frug/materials/blob/gh-pages/news/2016_n3_Cpp17_Nouveautes-du-langage.md) ; 4. [_NouveautĂ©s de la bibliothĂšque standard_](https://github.com/cpp-frug/materials/blob/gh-pages/news/2016_n4_Cpp17_Nouveautes-de-la-bibliotheque.md) ; 5. [_Bilan et attentes pour C++20_](https://github.com/cpp-frug/materials/blob/gh-pages/news/2016_n5_Bilan-Cpp17-et-attentes-Cpp20.md). Avec toutes nos contributions rĂ©unies, nous profiterons davantage de nos dĂ©couvertes individuelles et nous offrirons un contenu CC BY-SA de qualitĂ© pour crĂ©er, par exemple, un article WikipĂ©dia C++17 en français. :-) Naissance dâun nouveau langage ============================== Ă la fin des annĂ©es 70, dans la cadre de sa thĂšse en Angleterre, le Danois Bjarne Stroustrup [Ă©tudiait](http://www.stroustrup.com/hopl2.pdf) le [paradigme de la programmation objet](https://fr.wikipedia.org/wiki/Programmation_orient%C3%A9e_objet) (avec le langage [Simula](https://fr.wikipedia.org/wiki/Simula)). En 1979, aux [Laboratoires Bell](https://fr.wikipedia.org/wiki/Laboratoires_Bell) (ĂtatsâUnis), Bjarne propose de rajouter ce paradigme objet au langage C quâil appela « _C with Classes_ ». Durant les annĂ©es 80, les nouvelles fonctionnalitĂ©s qui sont progressivement intĂ©grĂ©es au tout nouveau C++ provoque un schisme entre les fans du C classique et les enthousiastes du C++.  CrĂ©ation du comitĂ© de normalisation C++ ======================================= Dans la seconde moitiĂ© des annĂ©es 80, le [_usenet_](https://fr.wikipedia.org/wiki/Usenet) **comp.lang.c++** bouillonne, les premiers compilateurs C++ commencent Ă diverger, les dĂ©veloppeurs ont du mal Ă Ă©crire du C++ portable et dix ans aprĂšs la crĂ©ation du _C with Classes_, des Ă©vĂ©nements majeurs se produisent : * avril 1989, le groupe de travail [WG14](http://www.open-std.org/jtc1/sc22/wg14/) (comitĂ© du C) souhaite une normalisation du C++ ; * mai 1989, Ă la demande du WG14, Andrew Koenig et Bjarne Stroustrup rĂ©digent [_C++: as close as possible to C â but no closer_](http://isotc.iso.org/livelink/livelink/fetch/-8919800/8919823/16475317/16849788/C%2B%2B_as_close_as_possible_to_C_but_no_closer.pdf?nodeid=16849089), pour expliquer les divergences (incompatibilitĂ©s) du **C++** par rapport au **C** (ce qui est valide en C et qui ne lâest pas en C++) ; * juillet 1989, Dmitry Lenkov explique la [crĂ©ation dâun groupe de travail C++ officiel](http://open-std.org/JTC1/SC22/WG21/docs/papers/1989/X3_89-738R%20Programming%20Language%20C++%20Proposal.pdf) et dây inclure dâoffice Bjarne Stroustrup ; * fĂ©vrier 1990, premiĂšre rĂ©union du comitĂ© [ANSI](https://fr.wikipedia.org/wiki/American_National_Standards_Institute) C++ ; * juin 1991, la rĂ©union du comitĂ© ANSI C++ rĂ©unit de trĂšs nombreux participants non Ă©tatsâuniens et la dĂ©cision est prise de travailler conjointement avec le groupe de travail [WG21](http://www.open-std.org/jtc1/sc22/wg21/) international.  Sigle | DĂ©finition -------|------------------------ ISO | [Organisation internationale de normalisation](https://fr.wikipedia.org/wiki/Organisation_internationale_de_normalisation) IEC | [Commission Ă©lectrotechnique internationale](https://fr.wikipedia.org/wiki/Commission_%C3%A9lectrotechnique_internationale) JTC 001| [_Joint Technical Committee_ 001](https://fr.wikipedia.org/wiki/Joint_Technical_Committee_1) SC 22 | [_Subcommittee 22_](https://en.wikipedia.org/wiki/ISO/IEC_JTC_1/SC_22) (sousâcomitĂ© 22) dĂ©diĂ© aux langages de programmation, leur environnement et les interfaces avec les logiciels systĂšme WG 14 | _Working Group 14_ (groupe de travail 14) dĂ©diĂ© au langage C ([WG 14 sur le site de lâISO](http://isotc.iso.org/livelink/livelink?func=ll&objId=8919800)) WG 21 | _Working Group 21_ dĂ©diĂ© au C++ ([WG 21 sur le site de lâISO](http://isotc.iso.org/livelink/livelink?func=ll&objId=8918410)) La puissance du C++ =================== En 1991, un nouveau paradigme, la [programmation gĂ©nĂ©rique](https://fr.wikipedia.org/wiki/G%C3%A9n%C3%A9ricit%C3%A9) (`template`) est ajoutĂ©, ainsi que les [exceptions](https://fr.wikipedia.org/wiki/Syst%C3%A8me_de_gestion_d%27exceptions). Le C++ devient alors un formidable langage alliant un dĂ©couplage puissant et la performance du code exĂ©cutable optimisĂ© par les compilateurs C adaptĂ©s (cette flexibilitĂ© est trĂšs bien illustrĂ©e dans lâexcellent journal [_Expressions template pour les nuls_](https://linuxfr.org/users/serge_ss_paille/journaux/c-14-expressions-template-pour-les-nuls) de [_serge_sans_paille_](http://serge.liyun.free.fr/serge/)). Mais cette compatibilitĂ© avec le langage C contraint Ă utiliser une grammaire pas toujours simple et un temps de compilation souvent long. En 1994, Erwin Unruh prĂ©sente au comitĂ© C++ un [code source qui permet de calculer les nombres premiers Ă la compilation](http://www.erwin-unruh.de/primorig.html). Pour une partie des membres du comitĂ©, câĂ©tait une curiositĂ©. Tandis que les autres membres se grattaient la tĂȘte et prirent conscience que lâon venait de dĂ©couvrir, par hasard, que les _templates_ du C++ permettaient le paradigme de la [mĂ©taprogrammation](https://fr.wikipedia.org/wiki/M%C3%A9taprogrammation) ! Cette dĂ©couverte ouvre la voie Ă dâextraordinaires optimisations en permettant au compilateur de rĂ©aliser des calculs **Ă la compilation** (Ă ne pas confondre avec la rĂ©alisation de calculs Ă lâinitialisation ou durant lâexĂ©cution). Ces techniques atteignent des sommets avec [`boost::mpl`](http://www.boost.org/libs/mpl) (2002), [`boost::proto`](http://www.boost.org/libs/proto) (2008) et le futur [`boost::simd`](https://github.com/NumScale/boost.simd). Au dĂ©triment dâune grammaire difficile, des erreurs faciles, dâune compilation lente et dâun dĂ©bogage laborieux. Mais câest un des rares langages qui offre au dĂ©veloppeur autant dâabstraction et de performance en mĂȘme temps. La passion de ce langage lâemporte. Avec le temps, les piĂšges sont connus, les techniques maĂźtrisĂ©s, et le C++ devient un vrai bonheur. :-) De plus, ce langage bien vivant continue dâĂ©voluer dans le bon sens. Les trĂšs nombreux outils qui orbitent autour de ce formidable langage continuent aussi dâapporter plein de nouvelles fonctionnalitĂ©s. :-D  Les membres du comitĂ© de normalisation ====================================== En 1998, les membres finalisent le premier standard C++ : **C++98**. Soit une vingtaine dâannĂ©es aprĂšs la crĂ©ation du langage, et une dizaine dâannĂ©es aprĂšs lâinitiative de normaliser celuiâci. Pour [devenir](http://www.boost.org/community/committee.html) membre du [comitĂ©](https://isocpp.org/std/the-committee) international de normalisation du C++, appelĂ© officiellement **ISO/IEC JTC 001/SC 22/WG 14/WG 21**, il faut ĂȘtre membre dâune [reprĂ©sentation ISO de son pays](http://www.iso.org/iso/fr/home/about/iso_members.htm). Une dizaine de pays est reprĂ©sentĂ©e : * ĂtatsâUnis ([Task Group PL22.16](http://www.incits.org/committees/pl22.16) de lâANSI) ; * France ([ComitĂ© de Normalisation Cpp](http://norminfo.afnor.org/structure/commid=119670) de lâAFNOR) ; * Allemagne ([DIN](https://fr.wikipedia.org/wiki/Deutsches_Institut_f%C3%BCr_Normung)) ; * RoyaumeâUni ([BSI](http://www.iso.org/iso/fr/home/about/iso_members/iso_member_body.htm?member_id=2064)) ; * Canada ([SCC](http://www.iso.org/iso/fr/home/about/iso_members/iso_member_body.htm?member_id=1619)) ; * Finlande [SFS](http://www.iso.org/iso/fr/home/about/iso_members/iso_member_body.htm?member_id=1734) ; * Pays-Bas ([NEN](http://www.iso.org/iso/fr/home/about/iso_members/iso_member_body.htm?member_id=2027)) ; * Espagne ([AENOR](http://www.iso.org/iso/fr/home/about/iso_members/iso_member_body.htm?member_id=1717)) ; * Suisse ([SNV](http://www.iso.org/iso/fr/home/about/iso_members/iso_member_body.htm?member_id=2106)) ; * Italie ([UNI](http://www.iso.org/iso/fr/home/about/iso_members/iso_member_body.htm?member_id=1823)). CâĂ©tait IBM qui payait les frais de reprĂ©sentation du *ComitĂ© de Normalisation Cpp* de lâAFNOR. Mais, au dĂ©part Ă la retraite des employĂ©s IBM membres C++, plus personne ne payait les frais de reprĂ©sentation et la France nâĂ©tait plus officiellement reprĂ©sentĂ©e. Depuis peu, les choses sont rentrĂ©s dans lâordre. Une centaine de [membres](https://isocpp.org/wiki/faq/wg21) actifs se rencontrent quelque fois par an dans le cadre de la normalisation du C++ (essentiellement pour voter). Le plus gros du travail se fait Ă distance. Les membres C++ et les autres passionnĂ©s du C++ se rencontrent Ă©galement lors des grandes rencontres du C++ : [_CppCon_](http://cppcon.org/), [_C++Now_](http://cppnow.org/), [_Meeting C++_](https://meetingcpp.com/)... | | ------------|-----------|----------  |  | Dans lâintĂ©rĂȘt des utilisateurs du C++, les membres du comitĂ© [accordent au comitĂ© et Ă lâISO une licence](https://isocpp.org/home/terms-of-use) *mondiale, non exclusive, irrĂ©vocable, permettant lâoctroi dâune sousâlicence transfĂ©rable pour lâaffichage du contenu, la reproduction, lâadaptation, la distribution, la crĂ©ation de travaux dĂ©rivĂ©s Ă des fins commerciales ou non commerciales*. En 2012, cette rĂšgle a notamment Ă©tĂ© rappelĂ©e Ă IBM, Intel et Oracle (voir [N3423 §2.4](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2012/n3423.pdf)). Le standard ne peut ĂȘtre reproduit ================================== Comme la plupart des documents publiĂ©s par lâISO, la mention de droit dâauteur indique que la reproduction nâest pas autorisĂ©e : > > © ISO/IEC 2014 â All rights reserved > COPYRIGHT PROTECTED DOCUMENT > _All rights reserved. Unless otherwise specified, no part of this publication may be reproduced or utilized otherwise in any form or by any means, electronic or mechanical, including photocopying, or posting on the internet or an intranet, without prior written permission.> Permission can be requested from either ISO at the address below or ISOâs member body in the country of the requester._ Cette position est la mĂȘme pour les autres langages gĂ©rĂ©s par lâISO (Fortran, C...). Mais aussi pour [Java](https://docs.oracle.com/javase/specs/jls/se8/html/jls-0-front.html), [C#](https://github.com/KvanTTT/CSharp-Minifier/blob/master/CSharp%20Language%20Specification.docx) et de nombreux autres. Dans la pratique, cela ne gĂšne pas les dĂ©veloppeurs de ces langages. Ce type de mention empĂȘche juridiquement la reproduction du standard (mĂȘme un paragraphe ou un code dâexemple). Des sites qui respectent Ă la lettre le droit dâauteur, comme WikipĂ©dia, refusent de contenir la reproduction mĂȘme partielle dâun tel document. Dâautres sites, comme _stackoverflow_, sont [plus pragmatiques](http://stackoverflow.com/questions/2693199/do-destructors-have-names-according-to-the-standard). Notons que dâautres langages de programmation ont des spĂ©cifications libres : * les [documentations officielles de Rust](https://doc.rust-lang.org/) sont sous licence Apache 2.0 ou licence MIT ; * la [spĂ©cification de Go](https://golang.org/ref/spec) est sous licence CC-BY 3.0 ; * celle de Python... câest un peu plus compliquĂ©, simplifions en mentionnant juste la [licence PSF (_Python Software Foundation_)](https://docs.python.org/3/license.html#psf-license-agreement-for-python-release). Le standard est payant ====================== De plus, obtenir le standard C++ coĂ»te cher. MĂȘme la version PDF tĂ©lĂ©chargĂ©e : * 182 ⏠sur le [site de lâISO](http://www.iso.org/iso/fr/catalogue_detail?csnumber=64029) (198 francs suisses) ; * 238 ⏠sur le [site de lâANSI](http://webstore.ansi.org/RecordDetail.aspx?sku=ISO%2fIEC+14882%3a2014) (265 US$). (voir aussi dâ[autres sites vendant le standard](http://stackoverflow.com/a/83763/938111))  Les anciens standards supprimĂ©s =============================== Encore plus incroyable : chaque nouvelle publication du standard rĂ©voque ou supprime (_withdraw_) la version prĂ©cĂ©dente : * C++98 [ISO/IEC 14882:1998](http://www.iso.org/iso/fr/catalogue_detail?csnumber=25845) supprimĂ© ; * C++03 [ISO/IEC 14882:2003](http://www.iso.org/iso/fr/catalogue_detail?csnumber=38110) supprimĂ© ; * C++11 [ISO/IEC 14882:2011](http://www.iso.org/iso/fr/catalogue_detail?csnumber=50372) supprimĂ©. LâembĂȘtant est que la plupart des projets C++ actuellement utilisĂ©s sont codĂ©s en C++03. Et la plupart des entreprises utilisent encore aujourdâhui des versions de compilateurs qui ne supportent pas (ou partiellement) le standard C++11. Alors, comment sâinformer du standard C++ utilisĂ© par le bon vieux compilateur que lâon est obligĂ© dâutiliser ? Aller les [consulter Ă lâINRIA](http://opac.inria.fr/search*frf/a?searchtype=Y&searcharg=14882) ? Par exemple, cet [utilisateur a besoin dâacheter le standard C++03 qui nâest plus Ă la vente](http://programmers.stackexchange.com/questions/190294/about-ansi-c-2003-standard). Ouf, les brouillons du comitĂ© ============================= Les documents en cours de rĂ©daction (_draft_) du comitĂ© de normalisation sont gratuitement accessibles : * [open-std.org/jtc1/sc22/wg21](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/) ; * [github.com/cplusplus/draft](https://github.com/cplusplus/draft/tree/master/papers). Quand le comitĂ© de normalisation C++ valide un brouillon (nouvelle version C++), ce brouillon bĂ©nĂ©ficie de [derniĂšres corrections](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2012/n3338.html). Puis, le comitĂ© le fournit Ă lâISO qui change la mise en forme pour en faire une version officielle. Documentations C++ de rĂ©fĂ©rence =============================== Les standards C++ (officiels ou brouillons) ne sont pas simples Ă lire. Ces documents utilisent une terminologie trĂšs spĂ©cifique pour une spĂ©cification trĂšs rigoureuse. En fait, ces documents sont surtout utiles aux dĂ©veloppeurs des compilateurs et Ă ceux qui implĂ©mentent des bibliothĂšques standards (`std::`). Les utilisateurs du C++ (langage et bibliothĂšque standard) utilisent historiquement des livres (souvent ceux Ă©crits par Bjarne Stroustrup et Scott Meyers) et plus rĂ©cemment des sites Web : * [_fr.cppreference.com_](http://fr.cppreference.com) en français sous double licence CC BY-SA 3.0 et GFDL (disponible en diffĂ©rentes langues, la [version en anglais](http://en.cppreference.com) est la plus Ă jour) ; * [cplusplus.com](http://cplusplus.com/) seulement en anglais et nâautorisant pas la reproduction (pas de licence libre) ; * ... liste Ă complĂ©ter dans les commentaires. | | | | ------------|-----------|----------|-----|----  |  |  |  | Un standard ouvert ================== **Note des auteurs de cette dĂ©pĂȘche :** _Nous avons un profil plutĂŽt technique (dĂ©veloppeurs) et non pas juriste. Ce chapitre contient peutâĂȘtre des erreurs importantes, mais nous avons tentĂ© de rĂ©diger ce qui nous semble correct... Nous nâavons pas pris le risque de nous aventurer Ă comparer C++ avec [Java](http://www.lemonde.fr/technologies/article/2014/05/10/brevets-la-bataille-entre-oracle-et-google-sur-java-relancee_4414517_651865.html), [C#](https://digitalcitizen.info/2014/11/12/while-open-source-leads-to-patent-traps-free-software-warns-and-liberates/)... Celles et ceux qui connaissent bien le sujet, merci de nous Ă©clairer dans les commentaires. :-)_ Le C++ est bien un [standard ouvert](https://fr.wikipedia.org/wiki/Format_ouvert), sans brevet logiciel, sans propriĂ©tĂ© intellectuelle. CâestâĂ âdire que le langage et sa bibliothĂšque standard (API) peuvent ĂȘtre implĂ©mentĂ©s librement. De mĂȘme, le nom _C++_ nâest pas une marque, ni aucun type de propriĂ©tĂ© intellectuelle. Ă la diffĂ©rence de la marque [**JavaScriptÂź**](https://developer.mozilla.org/fr/docs/Web/JavaScript/A_propos#Ressources_JavaScript) dĂ©posĂ©e par Oracle, ou des marques non dĂ©posĂ©es [**RustTM**](https://www.mozilla.org/en-US/foundation/trademarks/list/), [**GoTM**](https://www.google.fr/intl/fr/permissions/trademark/trademark-list.html) (et une [autre **GoTM**](https://www.thoughtworks.com/news/innova-using-thoughtworks-studios-go)). Et, mĂȘme si C++ nâest pas encore aussi ouvert que peut lâĂȘtre RustTM, de nombreux membres du comitĂ© amĂ©liorent constamment la façon de travailler pour plus de transparence et plus de proximitĂ© avec les utilisateurs C++, comme lâutilisation dâun [compte GitHub](https://github.com/cplusplus). Les versions C++ ================ MĂȘme si le langage [naĂźt Ă la fin des annĂ©es 1970](http://en.cppreference.com/w/cpp/language/history), il nâest normalisĂ© que vingt ans plus tard, afin dâarrĂȘter la profusion de [versions C++ incompatibles](http://open-std.org/JTC1/SC22/WG21/docs/papers/1989/X3_89-738R%20Programming%20Language%20C++%20Proposal.pdf). Le tableau suivant liste les diffĂ©rentes versions C++ normalisĂ©es, ainsi que le brouillon **C++17** en cours de consolidation. Nous pouvons remarquer le saut considĂ©rable du nombre de pages entre **C++03** et **C++11**. Version | Pages ------------------------------------|------- C++98 [ISO/IEC 14882:1998 1998ćčŽ09æ01æ„](http://www.lirmm.fr/~ducour/Doc-objets/ISO+IEC+14882-1998.pdf) | 776 pages C++03 [ISO/IEC 14882:2003 2003ćčŽ10æ15æ„](https://github.com/hstefan/htlib/blob/master/res/INCITS%2BISO%2BIEC%2B14882-2003.pdf) | 786 pages (+ 1 %) C++11 [ISO/IEC 14882:2011 2011ćčŽ09æ01æ„](http://new.vk.com/doc100509572_160085962?hash=6801602629449dfa59&dl=27c32949114b3322a2)| 1356 pages (+ 73 %) C++11 [Draft N3376 2012ćčŽ02æ28æ„](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2012/n3376.pdf)| 1 324 pages C++14 [Draft N4296 2014ćčŽ11æ19æ„](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2014/n4296.pdf) | 1 368 pages (+ 3 %) C++17 [Draft N4606 2016ćčŽ07æ12æ„](https://github.com/cplusplus/draft/blob/master/papers/n4606.pdf)| 1 586 pages (+ 16 %) Attention, ce dernier lien est celui du brouillon **C++17** le plus rĂ©cent lors de la rĂ©daction de cette dĂ©pĂȘche. Cette version sera certainement obsolĂšte quelques mois aprĂšs la publication de cette dĂ©pĂȘche. Ceux qui ont lâĆil aiguisĂ© remarqueront que le brouillon N3376 reprĂ©sentant la version C++11 a Ă©tĂ© publiĂ©e (28/02/2012) aprĂšs la norme officielle 14882:2011 (1/09/2011). Ce N3376 correspond en fait Ă des corrections Ă©ditoriales mineures apportĂ©es au brouillon [N3291](http://www.joshuaburkholder.com/documents/n3291.pdf) fourni Ă lâISO. Câest le premier brouillon de postâpublication, le _first postâpublication draft_ en anglais.  Technical Specification (TS) ============================ Les spĂ©cifications techniques, notĂ©es **TS** pour _**T**echnical **S**pecification_, sont les documents de travail les plus importants du comitĂ© de normalisation. Ces documents sont la base de discussion des Ă©volutions du standard. GĂ©nĂ©ralement, les spĂ©cifications techniques sont composĂ©es de deux parties : * la premiĂšre partie donne les motivation du changement (lâavantage dâavoir telle fonctionnalitĂ© dans le C++ avec des exemples de code) ; * la seconde partie liste toutes les modifications Ă appliquer au standard C++ en cours de rĂ©daction (au _draft_). [![Illustration C++ de Dominic Alves sous license CC-BY-SA 2.0][CppVisImg]][CppVisWeb] [CppVisImg]: http://c2.staticflickr.com/2/1116/785982209_b0da7b4380_o.jpg [CppVisWeb]: http://www.flickr.com/photos/dominicspics/785982209 NumĂ©rotation des documents ========================== Ă partir de 1990, le comitĂ© numĂ©rote ses documents officiels sur quatre chiffres en commençant par le n°[`0000`](http://open-std.org/JTC1/SC22/WG21/docs/papers/1990/WG21%201990/X3J16_90-0000%20WG21.pdf). Ce numĂ©ro est incrĂ©mentĂ© pour chaque nouveau document ou nouvelle rĂ©vision dâun document. En 1991, le prĂ©fixe **N** est adoptĂ©e, et le premier document Ă en profiter est le [`N0007`](http://open-std.org/JTC1/SC22/WG21/docs/papers/1991/WG21%201991/X3J16_91-0089%20WG21_N0007.pdf). **N** comme _**N**umber_ (numĂ©ro). Ces numĂ©ros **`xxxx`** peuvent paraĂźtre obscurs, mais sont trĂšs importants, car ils sont utilisĂ©s comme rĂ©fĂ©rences rigoureuses aux fonctionnalitĂ©s C++ : * dans les Ă©changes entre membres du comitĂ© ; * par de nombreux [sites Web](https://cmake.org/cmake/help/latest/prop_gbl/CMAKE_CXX_KNOWN_FEATURES.html). Pour faire le lien entre les principales spĂ©cifications techniques _(TS)_ et leur numĂ©ro **`xxxx`** de rĂ©vision la plus rĂ©cente, une astuce est dâutiliser la page [_experimental_ sur _cppreference.com_](http://en.cppreference.com/w/cpp/experimental). Voici, en exemple, lâhistorique des TS Ă propos des _Modules_ : AnnĂ©e| NumĂ©ro | Titre | RĂ©vision -----|---------|-------|--- 2004 | [`N1736`](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2004/n1736.pdf) | Modules in C++ | 1 2005 | [`N1778`](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2005/n1778.pdf) | Modules in C++ | 2 2006 | [`N1964`](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2006/n1964.pdf) | Modules in C++ | 3 2006 | [`N2073`](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2006/n2073.pdf) | Modules in C++ | 4 2007 | [`N2316`](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2316.pdf) | Modules in C++ | 5 2012 | [`N3347`](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2012/n3347.pdf) | Modules in C++ | 6 2014 | [`N4047`](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2014/n4047.pdf) | A Module System for C++ | 1 2014 | [`N4214`](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2014/n4214.pdf) | A Module System for C++ | 2 2015 | [`N4465`](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2015/n4465.pdf) | A Module System for C++ | 3 2016 | [`P0142R0`](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/p0142r0.pdf) | A Module System for C++ | 4 Remarquons le changement de nommage pour la rĂ©vision de 2016. Le nouveau nommage **`PxxxxRx`** a Ă©tĂ© mis en place en septembre 2015 avec un **P** comme _**P**roposal_ (**P**roposition). Progressivement, les **`PxxxxRx`** doivent remplacer les **`Nxxxx`**. Lâavantage est de conserver le mĂȘme numĂ©ro **`xxxx`** pour toutes les rĂ©visions du document. Comme en C++, on commence par compter la premiĂšre **R**Ă©vision Ă partir de **`R0`**. Lâexemple ciâdessus est un cas particulier : **`R0`** est bien la premiĂšre rĂ©vision du nouveau format, mais la quatriĂšme rĂ©vision des documents _A Module System for C++_. Defect Report (DR) ================== MĂȘme aprĂšs moult relectures par les meilleurs experts C++ au monde, avec toutes les prĂ©cautions prises par les institutions officielles, les publications des standards C++ contenaient 5 000 anomalies ayant fait lâobjet, chacune, dâun [rapport dâanomalie (_Defect Report_)](https://isocpp.org/std/submit-issue) ! * 2 200 rapports dâanomalie au niveau du [langage](http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_toc.html) ; * 2 750 rapports dâanomalie au niveau de la [bibliothĂšque standard](http://www.open-std.org/jtc1/sc22/wg21/docs/lwg-toc.html). Lors de ses rĂ©unions, le comitĂ© discute des rapports dâanomalie et devrait publier rĂ©guliĂšrement des rectificatifs techniques (_Technical Corrigendum_). Mais le comitĂ© nâa jamais publiĂ© aucun rectificatif technique Ă ce jour ! Par exemple, le comitĂ© avait approuvĂ© un [rectificatif technique en 2003](http://www.open-std.org/jtc1/sc22/wg21/docs/standards). Et, finalement, le comitĂ© publie comme Ă©tant une nouvelle version du standard, le **C++03** : > _A technical corrigendum was approved in 2003, and the standard was published again as the ISO/IEC 14882:2003 edition, published 2003ćčŽ10æ16æ„._ Bon, câest vrai, Ă la dĂ©charge du comitĂ©, ce rectificatif technique de 2003 contenait une nouvelle fonctionnalitĂ© : [_Value initialization_](http://en.cppreference.com/w/cpp/language/value_initialization#Notes). CâĂ©tait la derniĂšre fois, que le comitĂ© avait travaillĂ© sur un rectificatif technique. NĂ©anmoins, mĂȘme si le comitĂ© ne publie aucun rectificatif technique, les rapports dâanomalie approuvĂ©s doivent ĂȘtre [pris en compte par les compilateurs](http://clang.llvm.org/cxx_dr_status.html). Des sites comme _cppreference.com_ listent les changements induits par ces rapports dâanomalie : * quatre rapports dâanomalie pour lâ[opĂ©rateur ternaire `cond ? a : b`](http://en.cppreference.com/w/cpp/language/operator_other#Defect_reports) ; * trois rapports dâanomalie pour les [variables membres](http://en.cppreference.com/w/cpp/language/data_members#Defect_reports) ; * trois rapports dâanomalie pour [`return`](http://en.cppreference.com/w/cpp/language/return#Defect_reports) ; * deux rapports dâanomalie pour [`throw`](http://en.cppreference.com/w/cpp/language/throw#Defect_reports)... Les versions officielles du C++ deviennent donc vite obsolĂštes aprĂšs leur publication, car ces documents sont figĂ©s et ne bĂ©nĂ©ficient pas des corrections apportĂ©es par les rapports dâanomalie. Par consĂ©quence, celui qui achĂšte une version officielle du standard C++, devrait aussi suivre tous les rapports dâanomalie approuvĂ©s par le comitĂ©... Pour terminer, notons aussi que des rapports dâanomalie approuvĂ©s lors dâune rĂ©union du comitĂ© se retrouvent ne plus ĂȘtre approuvĂ©s lors de la rĂ©union suivante. Alors, chĂšre lectrice, cher lecteur de _LinuxFr.org_, esâtu Ă©tonnĂ©(e) par ce fonctionnement. Connaisâtu dâautres façons de maintenir un tel document ? Comment cela se passeâtâil dans dâautres langages de programmation ? Asâtu des idĂ©es dâamĂ©lioration ? Un langage compliquĂ© qui se simplifie ===================================== Par rapport Ă tous les langages utilisĂ©s en production, avouons que le C++ est peutâĂȘtre le langage le plus complexe que lâhumanitĂ© ait pu inventer ! Les dĂ©veloppeurs C++ en ont bien conscience. Câest peutâĂȘtre la raison pour laquelle les participants aux _meetups_ se montrent souvent bienveillants Ă lâĂ©gard des autres langages. Les dĂ©veloppeurs C++ aimeraient un langage plus simple, Ă condition de « **ne pas sacrifier la sacroâsainte performance** ». Le C++ est tellement vaste et semĂ© de subtilitĂ©s, que les dĂ©veloppeurs C++ nâen connaissent bien souvent quâune petite portion. Ainsi, lors dâun entretien de Bjarne Stroustrup (un des experts C++ les plus actifs du comitĂ©), celuiâci avait indiquĂ© quâil connaissait seulement 60 % du standard. Ceux qui maĂźtrisent vraiment le C++ sur le bout des doigts sont appelĂ©s des juristes du C++, ou plus gĂ©nĂ©ralement « _language lawyers_ » en anglais (ils ne sont pas forcĂ©ment de bons dĂ©veloppeurs).  Pour inverser la tendance, certains membres du comitĂ© de normalisation, comme [Bjarne Stroustrup](https://fr.wikipedia.org/wiki/Bjarne_Stroustrup) (le crĂ©ateur du C++) souhaitent accĂ©lĂ©rer lâĂ©volution du langage vers un C++ plus intuitif, plus sĂ»r, et toujours plus performant. Un processus de normalisation qui sâouvre davantage ================================================== Câest dans ce cadre que lâinitiative [_C++ Core Guidelines_](https://github.com/isocpp/CppCoreGuidelines) (Recommandations C++) a Ă©tĂ© lancĂ©e. A la fois pour proposer un sousâensemble du C++ plus sĂ»r, plus simple et sans sacrifier les performances. Mais aussi pour faire pression sur les membres du comitĂ© pour adopter les idĂ©es de la _Guidelines Support Library_ (BibliothĂšque de support des recommandations) [activement implĂ©mentĂ©e sur le dĂ©pĂŽt Git de Microsoft](https://github.com/Microsoft/GSL), mais aussi sur le [dĂ©pĂŽt Git de Martin Moene](https://github.com/martinmoene/gsl-lite) qui est compatible avec beaucoup plus de compilateurs. Pour faciliter les contributions au standard, le comitĂ© a aussi migrĂ© sur [GitHub](https://github.com/cplusplus). Le standard en cours de rĂ©daction/maintenance est sur le dĂ©pĂŽt Git [_draft_](https://github.com/cplusplus/draft) (brouillon). LâintĂ©gration dâune fonctionnalitĂ© au brouillon (standard en cours de rĂ©daction) est souvent formalisĂ©e par une fusion (_merge_) dâune branche **Nxxxx** vers la branche **master**. Cycle de publication [triannuel](http://www.universalis.fr/dictionnaire/triannuel/) ================================ AprĂšs la version majeure **C++98** (et son correctif **C++03**), un nouveau standard C++ devait ĂȘtre publiĂ© dans les annĂ©es suivantes. Comme sa date de publication nâĂ©tait pas fixĂ©e, cette version a Ă©tĂ© nommĂ©e temporairement **C++0x**. Mais, avec le manque de maturitĂ© de certaines fonctionnalitĂ©s et les requĂȘtes continuelles dâajout de nouvelles fonctionnalitĂ©s, le comitĂ© de normalisation nâarrivait pas Ă stabiliser le standard. Et, finalement, **C++0x** a Ă©tĂ© publiĂ© en 2011 ! Ne perdons pas la face, `0x = 11` est correct mathĂ©matiquement avec `x = B` en [hexadĂ©cimal](https://fr.wikipedia.org/wiki/Syst%C3%A8me_hexad%C3%A9cimal) :-) Afin dâĂ©viter tout nouveau glissement, le comitĂ© a alors dĂ©cidĂ© de publier un nouveau standard C++ tous les trois ans, en figeant les fonctionnalitĂ©s lâannĂ©e _n_ - 1. Avec un cycle dâune version majeure (**C++11**) suivie dâune version mineure (**C++14**). MalgrĂ© des dates de publication figĂ©es, les appellations **C++1y** (pour **C++14**) et **C++1z** (pour **C++17**) perdurent. Par exemple, lâ[option de compilation `-std=c++1z`](https://gcc.gnu.org/projects/cxx-status.html) ou lâ[Ă©tiquette _c++1z_ sur _stackoverflow_](http://stackoverflow.com/tags/c%2b%2b1z/info). Les membres du comitĂ© de normalisation utilisent le terme **C++17** (et non pas _C++1z_). Soyons confiants, **C++1z** verra bien le jour en 2017 (et non pas en 2018, ni aprĂšs). ImplĂ©mentation de rĂ©fĂ©rence =========================== Le comitĂ© ne fournit ~~pas~~ plus dâimplĂ©mentation de rĂ©fĂ©rence ou de preuve de concept. Mais les membres du comitĂ© travaillent en Ă©troite collaboration avec les Ă©diteurs de compilateurs (notamment GCC et LLVM/Clang). | | ------------|-----------|---------  |  | NĂ©anmoins, en 1999, des membres du comitĂ© ont quand mĂȘme créé le projet [_Boost.org_](https://fr.wikipedia.org/wiki/Boost_(biblioth%C3%A8ques)) afin de proposer et valider des implĂ©mentations de fonctionnalitĂ©s candidates de la bibliothĂšque standard. Ainsi, dĂšs 2005, la publication du brouillon [_C++ TR1_](https://en.wikipedia.org/wiki/C%2B%2B_Technical_Report_1) est en lien direct avec les dĂ©veloppements fournis par le projet _Boost.org_.  Dâailleurs, câest devenu le parcours classique pour les nouveaux composants de la bibliothĂšque standard. Câest, par exemple, le cheminement de `std::filesystem`. Et plus rĂ©cemment, quand le Français [JoĂ«l Falcou](http://www.slideshare.net/SergeyPlatonov/joel-falcou-boostsimd) a [proposĂ©](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2013/n3571.pdf) la fonctionnalitĂ© [SIMD](https://github.com/NumScale/boost.simd "Single instruction, multiple data"), les membres du comitĂ© lâont invitĂ© Ă [intĂ©grer Boost](http://lists.boost.org/Archives/boost/2014/02/211609.php) dans un premier temps. Cela permet Ă©galement de vĂ©rifier la popularitĂ© dâun composant. La suite... =========== La prochaine dĂ©pĂȘche va nous permettre dâentrer enfin dans le vif du sujet **C++17**. Merci de nous donner un coup de main Ă la rĂ©daction des prochaines dĂ©pĂȘches **C++17**. Pour participer ou lire en avance les prochaines dĂ©pĂȘches : * se rendre sur lâespace de [rĂ©daction _LinuxFr.org_](https://linuxfr.org/redaction) (recommandĂ© pour la rĂ©daction) ; * directement sur le [dĂ©pĂŽt Git *materials*](https://github.com/cpp-frug/materials/tree/gh-pages/Cxx17) du C++FRUG (Groupe des utilisateurs C++ francophones). Droit dâauteur, remerciements et licences ========================================= Le texte de cette dĂ©pĂȘche est protĂ©gĂ© par ~~le [droit dâauteur](https://fr.wikipedia.org/wiki/Droit_d%27auteur#Droit_d.E2.80.99auteur_traditionnel_vs._licences_de_libre_diffusion)~~ la [gauche dâauteur](https://fr.wikipedia.org/wiki/Gauche_d'auteur) et rĂ©utilisable sous licence [CC BY-SA 4.0](https://creativecommons.org/licenses/by-sa/4.0/deed.fr). Merci aux nombreux auteurs sur le [dĂ©pĂŽt Git](https://github.com/cpp-frug/materials/graphs/contributors) et sur _LinuxFr.org_ : [olibre](https://github.com/olibre), [duckie](https://github.com/duckie), [rom1v](https://github.com/rom1v), [Oliver H](https://linuxfr.org/users/oliver_h), [cracky](https://linuxfr.org/users/cracky), [Lucas](https://linuxfr.org/users/george), [palm123](https://linuxfr.org/users/palm123), [Adrien Dorsaz](https://linuxfr.org/users/trim), [Martin Peres](https://linuxfr.org/users/mupuf), [RyDroid](https://linuxfr.org/users/rydroid), [M5oul](https://linuxfr.org/users/m5oul), [Anthony Jaguenaud](https://linuxfr.org/users/capello) et [BenoĂźt Sibaud](https://linuxfr.org/users/oumph). Merci aussi Ă [Klaim](https://github.com/klaim), [Ădouard A](https://github.com/edouarda), [rewind](https://linuxfr.org/users/rewind), [David Demelier](https://linuxfr.org/users/markand), [gasche](https://linuxfr.org/users/bluestorm), [freem](https://linuxfr.org/users/freem) et [Âźom](https://linuxfr.org/users/rom1v) pour leurs commentaires pertinents. Aussi un immense merci Ă mes collĂšgues dĂ©veloppeurs qui, Ă dĂ©faut de mâaider Ă la rĂ©daction, ont illustrĂ© cette dĂ©pĂȘche (et les dĂ©pĂȘches suivantes) avec des dessins humoristiques sous licence libre : Ziyue, AKP, Florent B, et Jae-Zun. Merci aussi Ă Dominic Alves pour son [dessin C++](https://www.flickr.com/photos/dominicspics/785982209) sous licence libre. Merci Ă [Theppitak Karoonboonyanan](https://github.com/thep) pour maintenir la police de caractĂšres [Purisa](https://github.com/tlwg/fonts-tlwg/commits/master/tlwg/Purisa.sfd). * Lâ[Ă©volution du langage C++](https://github.com/cpp-frug/materials/blob/gh-pages/images/Cpp-Evolution-Original.svg) est inspirĂ©e dâune Ćuvre dont les droits de rĂ©utilisation nâont pas Ă©tĂ© identifiĂ©s. La rĂ©alisation sous licence [CC BY-SA 3.0](https://creativecommons.org/licenses/by-sa/3.0/deed.fr) est de Florent B (dâaprĂšs une premiĂšre Ă©bauche de Jae-Zun) et utilise la police de caractĂšres [Purisa](https://github.com/tlwg/fonts-tlwg/commits/master/tlwg/Purisa.sfd) maintenue par [Theppitak Karoonboonyanan](https://github.com/thep) sous licence [GPL v2](https://github.com/tlwg/fonts-tlwg/blob/master/GPL) ; * Le logo C++ Francophonie [(disponible sur commons.wikimedia.org)](https://commons.wikimedia.org/wiki/File:Cpp-Francophonie.svg) est dans le [domaine public](https://fr.wikipedia.org/wiki/Domaine_public) (mĂȘme si ce nâest thĂ©oriquement [pas possible en droit dâauteur français](https://fr.wikipedia.org/wiki/Droit_d%27auteur#Droit_d.E2.80.99auteur_traditionnel_vs._licences_de_libre_diffusion)) ; * Le dessin du [C++ vissĂ© sur de lâĂ©lectronique](https://www.flickr.com/photos/dominicspics/785982209) est de Dominic Alves sous licence [CC BY-SA 2.0](https://creativecommons.org/licenses/by-sa/2.0/deed.fr) (2007). Merci dâavance de lâaide apportĂ©e sur les prochaines dĂ©pĂȘches C++17 en cours de prĂ©paration : Micka pour ses exemples *utiles* et AMB007 pour les bogues trouvĂ©s dans les codes C++ dâexemple.