C++23 est une version de la norme ISO/IEC 14882 définissant le langage de programmation C++ qui suit la version C++20[1]. La norme a été finalisée par le WG21 lors de la réunion à Issaquah en février 2023[2]. Le dernier working draft gratuit est le N4950, qui date du [3].

C++23

Fonctionnalités

modifier

Les modifications qui ont été acceptées pour inclusion dans C++23 incluent :

Langage

modifier
  • if consteval[4]
  • opérateur d'indexation [] multidimensionnel (par exemple v[1, 3, 7] = 42;)[5]
  • opérateurs d'appel () et d'indexation [] statiques et lambdas statiques[6],[7]
  • auto(x) et auto{x}[8]
  • nouvelles directives de préprocesseur :
    • #elifdef et #elifndef[9]
    • #warning[10]
  • extension de la durée de vie de certaines temporaires dans les boucles for range-based[11]
  • nouvel attribut standard [[assume(expression)]][12]
  • déduction des arguments de classe template depuis les constructeurs hérités[13]
  • labels à la fin d'un bloc d'instructions[14]
  • déclaration d'alias dans les init-statements[15]
  • suffixes littéraux uz et z pour std::size_t et std::ssize_t[16]
  • types flottants étendus std::float16_t, std::float32_t, std::float64_t, std::float128_t, std::bfloat16_t[17]
  • () facultatif pour les expressions lambdas nullaires[18]
  • attributs sur les expressions lambdas[19]
  • modifications de constexpr :
    • variables non-littérales, labels, et gotos dans les fonctions constexpr[20]
    • variables static et thread_local dans les fonctions constexpr[21]
    • les fonctions constexpr n'ont plus besoin que leur type de retour et leurs types de paramètres soient des types littéraux
  • réduction des conversions contextuelles vers bool dans les static_assert et if constexpr[22]
  • suppression des espaces avant la jonction des lignes[23]
  • séquences d'échappement délimitées[24]
  • caractères d'échappement universels nommés[25]
  • modifications de l'encodage du texte :
    • prise en charge de l'UTF-8 comme encodage de fichier source portable[26]
    • encodage cohérent des caractères littéraux[27]
    • jeux de caractères et encodages[28]

Bibliothèque

modifier

Références

modifier
  1. (en) « The Standard : Standard C++ », sur isocpp.org (consulté le )
  2. (en) Herb Sutter, « C++23 “Pandemic Edition” is complete (Trip report: Winter ISO C++ standards meeting, Issaquah, WA, USA) », sur Sutter’s Mill, (consulté le )
  3. (en) Working Draft, Standard for Programming Language C++, (lire en ligne)
  4. (en) Barry Revzin, Richard Smith, Andrew Sutton et Daveed Vandevoorde, « if consteval »,
  5. (en) Mark Hoemmen, Daisy Hollman, Corentin Jabot, Isabella Muerte et Christian Trott, « Multidimensional subscript operator »,
  6. (en) « static operator() »,
  7. (en) « static operator[] »,
  8. (en) Zhihao Yuan, « auto(x): decay-copy in the language »,
  9. (en) Melanie Blower, « Add support for preprocessing directives elifdef and elifndef »,
  10. (en) Aaron Ballman, « Support for #warning »,
  11. (en) « Wording for P2644R1 Fix for Range-based for Loop »,
  12. (en) « Portable assumptions »,
  13. (en) Timur Doumler, « Wording for class template argument deduction from inherited constructors »,
  14. (en) « Labels at the end of compound statements (C compatibility) »,
  15. (en) Jens Maurer, « Extend init-statement to allow alias-declaration »,
  16. (en) JeanHeyd Meneide et Rein Halbersma, « Literal Suffix for (signed) size_t »,
  17. (en) « Extended floating-point types and standard names »,
  18. (en) Alex Christensen et JF Bastien, « P1102R2: Down with ()! »,
  19. (en) « Attributes on Lambda-Expressions »
  20. (en) Ville Voutilainen, « Non-literal variables (and labels and gotos) in constexpr functions »,
  21. (en) « Permitting static constexpr variables in constexpr functions »,
  22. (en) Andrzej Krzemieński, « Narrowing contextual conversions to bool »,
  23. (en) Corentin Jabot, « Trimming whitespaces before line splicing »,
  24. (en) « Delimited escape sequences »,
  25. (en) « Named universal character escapes »,
  26. (en) « Support for UTF-8 as a portable source file encoding »,
  27. (en) Corentin Jabot, « Consistent character literal encoding »,
  28. (en) Jens Maurer, « Character sets and encodings »,