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_. :-) ![Évolution du langage C++](https://cpp-frug.github.io/materials/images/cpp-evolution-path.svg) ---- [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) ---- ![logo "The C++ Programming Language"](https://isocpp.org/files/img/logo1.PNG) 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++. ![Bjarne Stroustrup](https://upload.wikimedia.org/wikipedia/commons/d/da/BjarneStroustrup.jpg) 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. ![Organisation du WG21](https://isocpp.org/files/img/wg21-structure.png) 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 ![C++ entourĂ© d'autres langages de programmation](https://isocpp.org/files/img/C++14.jpg) 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/)... | | ------------|-----------|---------- ![Logo CppCon](https://meetingcpp.com/tl_files/mcpp/sponsoren/cppcon-logo-250.png) | ![Logo C++Now](https://isocpp.org/files/img/cppnow-logo.PNG) | 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 : > ![Logo ISO](https://isocpp.org/files/img/iso.png)> © 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)) ![Logo C++ en forme hexadĂ©cimal](https://isocpp.org/files/img/logo-hex.png) 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. | | | | ------------|-----------|----------|-----|---- ![livre _The C++ Programming Language_](https://isocpp.org/files/img/tcpl4e.png) | ![livre _A Tour of C++_](https://isocpp.org/files/img/tour.jpg) | ![livre _The C++ Programming Language (Special 3rd Edition)_](http://www.pdfdrive.net/assets/thumbs/069/069cb03b9970368939ef71f49534cc4b-s.jpg) | ![logo cppreference.com](http://cppcon.org/wp-content/uploads/2014/08/community-cppreference.png) | 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. ![Analogie entre chaque version C++ et l'Ă©volution depuis le singe jusqu'Ă  homo sapiens puis homo sapiens se courbe de plus en plus pour se retrouver devant un ordinateur qui correspond Ă  la version C++17 et ce dernier homme moderne dit Cool On va pouvoir coder](http://cpp-frug.github.io/materials/images/cpp-evolution-path.svg) 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). ![Bjarne Strouput](https://isocpp.org/files/img/bigthink-stroustrup.PNG) 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). | | ------------|-----------|--------- ![logo GCC](https://upload.wikimedia.org/wikipedia/commons/thumb/a/af/GNU_Compiler_Collection_logo.svg/200px-GNU_Compiler_Collection_logo.svg.png) | ![logo LLVM](https://isocpp.org/files/img/llvm.png) | 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_. ![logo Boost.org](https://isocpp.org/files/img/boost.png) 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.

AltStyle ă«ă‚ˆăŁăŠć€‰æ›ă•ă‚ŒăŸăƒšăƒŒă‚ž (->ă‚ȘăƒȘă‚žăƒŠăƒ«) /