Namespaces
Variants

C++ Standard Library

From cppreference.net

La bibliothèque standard C++ fournit un large éventail de fonctionnalités utilisables en C++ standard.

Table des matières

Catégorie

La bibliothèque de support du langage fournit des composants requis par certaines parties du langage C++, tels que l'allocation mémoire ( new / delete ) et le traitement des exceptions .

La bibliothèque de concepts décrit les composants de bibliothèque que les programmes C++ peuvent utiliser pour effectuer la validation à la compilation des arguments de template et réaliser la dispatch de fonction basé sur les propriétés des types.

(depuis C++20)

La bibliothèque de diagnostic fournit un cadre cohérent pour signaler les erreurs dans un programme C++, incluant des classes d'exception prédéfinies .

La bibliothèque de gestion de la mémoire fournit des composants pour la gestion de la mémoire, incluant les pointeurs intelligents et l'allocateur délimité (depuis C++11) .

La bibliothèque de métaprogrammation décrit les fonctionnalités utilisables dans les templates et durant l'évaluation constante, incluant les type traits , integer sequence , (depuis C++14) et l' arithmétique rationnelle .

(depuis C++11)

La bibliothèque d'utilitaires généraux inclut des composants utilisés par d'autres éléments de la bibliothèque, tels qu'un allocateur de stockage prédéfini pour la gestion dynamique du stockage, et des composants utilisés comme infrastructure dans les programmes C++, tels que les tuples et (depuis C++11) enveloppes de fonction .

Les conteneurs , itérateurs , ranges (depuis C++20) , et les bibliothèques d' algorithmes fournissent à un programme C++ un accès à un sous-ensemble des algorithmes et structures de données les plus utilisés.

La bibliothèque de chaînes fournit le support pour manipuler du texte représenté comme des séquences homogènes des types suivants : char , char8_t (depuis C++20) , char16_t , char32_t (depuis C++11) , wchar_t , et tout autre type similaire à un caractère.

La bibliothèque de traitement de texte fournit la correspondance et la recherche d'expressions régulières (depuis C++11) , des utilitaires pour le formatage de texte (depuis C++20) , l'identification des encodages de texte (depuis C++26) et les fonctionnalités de localisation .

La bibliothèque numérique fournit des algorithmes numériques et des composants de nombres complexes qui étendent le support pour le traitement numérique. Le composant valarray offre un support pour le traitement par lots, potentiellement implémenté comme des opérations parallèles sur les plateformes qui prennent en charge ce type de traitement. Le composant génération de nombres aléatoires fournit des fonctionnalités pour générer des nombres pseudo-aléatoires. (depuis C++11)

La bibliothèque de temps fournit des utilitaires temporels généralement utiles.

La bibliothèque d'entrée/sortie fournit les composants iostream qui sont le mécanisme principal pour l'entrée et la sortie des programmes C++. Ils peuvent être utilisés avec d'autres éléments de la bibliothèque, en particulier les chaînes, les locales et les itérateurs.

La bibliothèque de support des threads fournit des composants pour créer et gérer des threads, incluant les opérations atomiques , l'exclusion mutuelle , et la communication inter-threads.

(depuis C++11)

La bibliothèque de support d'exécution fournit un cadre pour la gestion de l'exécution asynchrone sur des ressources d'exécution génériques.

(depuis C++26)

Contenu de la bibliothèque

La bibliothèque standard C++ fournit les définitions pour les entités et macros décrites dans les synopsis des en-têtes de la bibliothèque standard C++ , sauf indication contraire.

Toutes les entités de la bibliothèque, à l'exception de operator new et operator delete , sont définies dans l'espace de noms std ou dans des espaces de noms imbriqués dans l'espace de noms std (à l'exception des entités pour les fonctionnalités de la bibliothèque standard C, voir ci-dessous). Il n'est pas spécifié si les noms déclarés dans un espace de noms spécifique sont déclarés directement dans cet espace de noms ou dans un espace de noms inline à l'intérieur de cet espace de noms. (depuis C++11)

En-têtes

Chaque élément de la bibliothèque standard C++ est déclaré ou défini (selon le cas) dans un en-tête . Un en-tête n'est pas nécessairement un fichier source, et les séquences délimitées par < et > dans les noms d'en-tête ne sont pas nécessairement des noms de fichiers sources valides.

La bibliothèque standard C++ fournit les en-têtes de bibliothèque C++ et en-têtes C++ supplémentaires pour les fonctionnalités de la bibliothèque C (voir la page « headers » pour les descriptions) :

**Note:** Aucune traduction n'a été effectuée car : - Tous les textes se trouvent dans des balises ` ` (équivalent à ` `) - Les titres (attributs `title`) contiennent des termes techniques C++ spécifiques - La structure HTML et le formatage ont été préservés intégralement - Les en-têtes C++ (` `, ` `, etc.) ne sont pas traduits conformément aux instructions **Note:** Aucune traduction n'a été effectuée car : - Tous les textes se trouvent dans des balises ` ` (considérées comme du code) - Les termes C++ spécifiques (`barrier`, `concepts`, `latch`, `semaphore`, `stop_token`) ne doivent pas être traduits - Les attributs `title` et `href` contiennent des chemins techniques qui ne doivent pas être modifiés Le contenu reste donc identique à l'original.
En-têtes de bibliothèque C++
<algorithm> <iomanip> <list> <ostream> <streambuf>
<bitset> <ios> <locale> <queue> <string>
<complex> <iosfwd> <map> <set> <typeinfo>
<deque> <iostream> <memory> <sstream> <utility>
<exception> <istream> <new> <stack> <valarray>
<fstream> <iterator> <numeric> <stdexcept> <vector>
<functional> <limits>
En-têtes ajoutés en C++11
<array> <condition_variable> <mutex> <scoped_allocator> <type_traits>
<atomic> <forward_list> <random> <system_error> <typeindex>
<chrono> <future> <ratio> <thread> <unordered_map>
<codecvt> <initializer_list> <regex> <tuple> <unordered_set>
En-têtes ajoutés en C++14
<shared_mutex>
En-têtes ajoutés en C++17
<any> <execution> <memory_resource> <string_view> <variant>
<charconv> <filesystem> <optional>
En-têtes ajoutés en C++20
<barrier> <concepts> <latch> <semaphore> <stop_token>
<bit> <coroutine> <numbers> <source_location> <syncstream>
<compare> <format> <ranges> <span> <version>
En-têtes ajoutés en C++23
<expected> <flat_set> <mdspan> <spanstream> <stdfloat>
<flat_map> <generator> <print> <stacktrace>
En-têtes ajoutés en C++26
<contracts> <hazard_pointer> <inplace_vector> <rcu> <text_encoding>
<debugging> <hive> <linalg> <simd>
En-têtes supprimés
<codecvt> (depuis C++11) (obsolète en C++17) (supprimé en C++26)
<strstream> (obsolète en C++98) (supprimé en C++26)
En-têtes C++ pour les fonctionnalités de la bibliothèque C
<cassert> <clocale> <cstdarg> <cstring>
<cctype> <cmath> <cstddef> <ctime>
<cerrno> <csetjmp> <cstdio> <cwchar>
<cfloat> <csignal> <cstdlib> <cwctype>
<climits>
En-têtes ajoutés en C++11
<cfenv> <cinttypes> <cstdint> <cuchar>
En-têtes supprimés
<ccomplex> (depuis C++11) (obsolète en C++17) (supprimé en C++20)
<ciso646> (supprimé en C++20)
<cstdalign> (depuis C++11) (obsolète en C++17) (supprimé en C++20)
<cstdbool> (depuis C++11) (obsolète en C++17) (supprimé en C++20)
<ctgmath> (depuis C++11) (obsolète en C++17) (supprimé en C++20)

Une implémentation autonome possède un ensemble d'en-têtes défini par l'implémentation, consultez ici pour les exigences minimales concernant l'ensemble des en-têtes.

Bibliothèque standard C

La bibliothèque standard C++ met également à disposition les fonctionnalités de la bibliothèque standard C, adaptées de manière appropriée pour garantir la sécurité des types statiques. Les descriptions de nombreuses fonctions de bibliothèque s'appuient sur la bibliothèque standard C pour la sémantique de ces fonctions.

Dans certains cas, les signatures spécifiées dans le C++ standard peuvent différer des signatures de la bibliothèque standard C, et des surcharges supplémentaires peuvent être déclarées, mais le comportement et les préconditions (y compris celles impliquées par le restrict du C) (depuis C++17) sont identiques sauf indication contraire.

Pour la compatibilité avec la bibliothèque standard C, la bibliothèque standard C++ fournit les en-têtes C listés ci-dessous. L'utilisation prévue de ces en-têtes est uniquement pour l'interopérabilité. Il est possible que les fichiers source C++ aient besoin d'inclure l'un de ces en-têtes pour être valides selon la norme ISO C. Les fichiers source qui ne sont pas destinés à être également valides selon la norme ISO C ne devraient pas utiliser ces en-têtes C. Voir ici pour les descriptions.

En-têtes C
<assert.h> <limits.h> <stdarg.h> <string.h>
<ctype.h> <locale.h> <stddef.h> <time.h>
<errno.h> <math.h> <stdio.h> <wchar.h>
<float.h> <setjmp.h> <stdlib.h> <wctype.h>
<iso646.h> <signal.h>
En-têtes ajoutés en C++11
<complex.h> <inttypes.h> <stdbool.h> <tgmath.h>
<fenv.h> <stdalign.h> <stdint.h> <uchar.h>
En-têtes ajoutés en C++23
<stdatomic.h>
En-têtes ajoutés en C++26
<stdbit.h> <stdchkint.h>

Sauf indication contraire, le contenu de chaque en-tête c xxx est identique à celui de l'en-tête correspondant xxx .h tel que spécifié dans la bibliothèque standard C . Dans la bibliothèque standard C++, cependant, les déclarations (à l'exception des noms définis comme macros en C) se trouvent dans la portée de l'espace de noms std . Il n'est pas spécifié si ces noms (y compris les surcharges ajoutées) sont d'abord déclarés dans la portée de l'espace de noms global puis injectés dans l'espace de noms std par des using-declarations explicites.

Les noms qui sont définis comme des macros en C ( assert , offsetof , setjmp , va_arg , va_end et va_start ) doivent être définis comme des macros dans la bibliothèque standard C++, même si C autorise leur implémentation en tant que fonctions.

Les noms qui sont définis comme fonctions en C doivent être définis comme fonctions dans la bibliothèque standard C++. Cela interdit la pratique, autorisée en C, de fournir une macro de masquage en plus du prototype de fonction. La seule façon d'obtenir un comportement inline équivalent en C++ est de fournir une définition comme une fonction inline extern .

Les identifiants qui sont des mots-clés ou des opérateurs en C++ ne peuvent pas être définis comme des macros dans les en-têtes de la bibliothèque standard C++. En particulier, l'inclusion de l'en-tête standard <iso646.h> n'a aucun effet.

Noms associés aux fonctions sûres dans le C standard (depuis C++17)

Si un en-tête C++ est inclus, il est défini par l'implémentation si l'un des noms suivants de l'Annexe K standard C est déclaré dans l'espace de noms global (aucun d'entre eux n'est déclaré dans l'espace de noms std ):

Noms de l'Annexe K du standard C
abort_handler_s mbstowcs_s strncat_s vswscanf_s
asctime_s memcpy_s strncpy_s vwprintf_s
bsearch_s memmove_s strtok_s vwscanf_s
constraint_handler_t memset_s swprintf_s wcrtomb_s
ctime_s printf_s swscanf_s wcscat_s
errno_t qsort_s tmpfile_s wcscpy_s
fopen_s RSIZE_MAX TMP_MAX_S wcsncat_s
fprintf_s rsize_t tmpnam_s wcsncpy_s
freopen_s scanf_s vfprintf_s wcsnlen_s
fscanf_s set_constraint_handler_s vfscanf_s wcsrtombs_s
fwprintf_s snprintf_s vfwprintf_s wcstok_s
fwscanf_s snwprintf_s vfwscanf_s wcstombs_s
gets_s sscanf_s vprintf_s wmemcpy_s
gmtime_s mbstowcs_s vscanf_s vswscanf_s
abort_handler_s strcat_s vsnprintf_s wmemmove
ignore_handler_s strcpy_s vsnwprintf_s wprintf_s
localtime_s strerrorlen_s vsprintf_s wscanf_s
L_tmpnam_s strerror_s vsscanf_s
mbsrtowcs_s strlen_s vswprintf_s

Utilisation de la bibliothèque

Inclusion des en-têtes

Les entités de la bibliothèque standard C++ sont définies dans des en-têtes, dont le contenu est mis à disposition d'une unité de traduction lorsqu'elle contient la directive de préprocesseur appropriée #include .

Une unité de traduction peut inclure les en-têtes de bibliothèque dans n'importe quel ordre. Chacun peut être inclus plus d'une fois, sans effet différent de son inclusion exactement une fois, sauf que l'effet de l'inclusion de <cassert> ou <assert.h> dépend à chaque fois de la définition lexicalement courante de NDEBUG .

Une unité de traduction ne peut inclure un en-tête qu'en dehors de toute déclaration ou définition, et lexicalement avant la première référence dans cette unité de traduction à l'une des entités déclarées dans cet en-tête. Aucun diagnostic n'est requis.

Dans les unités de module , les en-têtes ne peuvent être inclus que dans les fragments de module global .

(depuis C++20)

Importation des en-têtes

Les en-têtes de la bibliothèque C++ , ou, pour une implémentation autonome, le sous-ensemble de ces en-têtes fournis par l'implémentation, sont collectivement appelés en-têtes de bibliothèque C++ importables .

Le contenu des en-têtes de bibliothèque C++ importables est mis à disposition d'une unité de traduction lorsqu'elle contient la déclaration d'importation appropriée.

(depuis C++20)

Importation des modules

La bibliothèque standard C++ fournit les modules de bibliothèque C++ suivants :

Pour chaque déclaration dans la bibliothèque standard,

  • le module auquel elle s'attache n'est pas spécifié, et
  • elle dénote la même entité qu'elle ait été rendue accessible via l'inclusion d'un en-tête, l'importation d'une unité d'en-tête ou l'importation d'un module de bibliothèque C++.
(depuis C++23)

Liaison

Les entités de la bibliothèque standard C++ possèdent une durée de stockage#lien externe . Sauf indication contraire, les objets et fonctions ont par défaut un extern "C++" lien .

Le fait qu'un nom de la bibliothèque standard C déclaré avec une liaison externe ait une liaison extern "C" ou extern "C++" est défini par l'implémentation. La norme C++ recommande d'utiliser extern "C++" dans ce cas.

Les objets et fonctions définis dans la bibliothèque et requis par un programme C++ sont inclus dans le programme avant le démarrage du programme.

Exigences pour les implémentations de la bibliothèque standard

Garanties

Un en-tête C++ doit fournir les déclarations et les définitions qui apparaissent dans

  • le synopsis de cet en-tête, ou
  • le synopsis d'un autre en-tête qui semble être inclus dans le synopsis de cet en-tête.

Pour les types et macros définis dans plusieurs en-têtes (tels que NULL ), inclure n'importe quel nombre de ces en-têtes dans n'importe quel ordre ne viole jamais la règle de définition unique .

Sauf indication contraire, tous les object-like macros définis par la bibliothèque standard C qui se développent en constant expressions intégrales peuvent être utilisés dans les directives de préprocesseur #if .

Appeler une signature de fonction non-membre de la bibliothèque standard résulte toujours en l'appel effectif de cette fonction. Par conséquent, une implémentation conforme de la bibliothèque standard ne peut pas définir de fonctions non-membres supplémentaires qui pourraient être appelées par un programme C++ valide.

Les signatures de fonctions non membres ne sont jamais déclarées avec des arguments par défaut supplémentaires.

Sauf indication contraire, les appels effectués par les fonctions de la bibliothèque standard vers des fonctions non-opérateur et non-membres n'utilisent pas de fonctions d'un autre namespace qui sont trouvées via argument-dependent name lookup .

Pour chaque déclaration friend d'une fonction (template) dans une définition de classe (template), aucune autre déclaration n'est fournie pour cette fonction (template).

Les signatures de fonctions de la bibliothèque standard ne peuvent être déclarées comme constexpr que si elles doivent obligatoirement être constexpr (libstdc++ cmath est notablement non conforme sur ce point). Si un en-tête fournit des déclarations non définissantes de fonctions ou constructeurs constexpr, les définitions correspondantes doivent également être fournies dans cet en-tête.

Sauf indication contraire, chaque fonction de la bibliothèque standard doit satisfaire à chacune des exigences suivantes pour prévenir les courses aux données :

  • Une fonction de la bibliothèque standard C++ ne peut pas accéder (directement ou indirectement) à des objets accessibles par des threads autres que le thread courant, sauf si les objets sont accédés (directement ou indirectement) via les arguments de la fonction, y compris this .
  • Une fonction de la bibliothèque standard C++ ne peut pas modifier (directement ou indirectement) des objets accessibles par des threads autres que le thread courant, sauf si les objets sont accédés (directement ou indirectement) via les arguments non constants de la fonction, y compris this .
    • Par exemple, un objet avec une durée de stockage statique ne peut pas être utilisé à des fins internes sans synchronisation, car cela peut provoquer une course aux données même dans des programmes qui ne partagent pas explicitement d'objets entre threads.
  • Une fonction de la bibliothèque standard C++ ne peut pas accéder à des objets indirectement accessibles via ses arguments ou via des éléments de ses arguments de conteneur , sauf en invoquant les fonctions requises par sa spécification sur ces éléments de conteneur.
  • Une opération sur des itérateurs obtenus en appelant une fonction membre de conteneur ou de chaîne de la bibliothèque standard peut accéder, mais pas modifier, le conteneur sous-jacent.
    • En particulier, les opérations sur conteneur qui invalident les itérateurs entrent en conflit avec les opérations sur les itérateurs associés à ce conteneur.
  • Une fonction de la bibliothèque standard C++ ne peut effectuer toutes les opérations uniquement dans le thread courant que si ces opérations ont des effets visibles pour les utilisateurs.
    • Les opérations sans effets secondaires visibles peuvent être parallélisées.
(depuis C++11)

Pour chaque classe définie dans la bibliothèque standard C++ devant être dérivée d'une autre classe définie dans la bibliothèque standard C++,

  • la classe de base doit être virtuelle si elle est spécifiée comme virtual ,
  • la classe de base ne peut pas être virtuelle si elle n'est pas spécifiée comme virtual , et
  • sauf indication contraire, les types avec des noms distincts doivent être des types distincts.

Sauf indication contraire, tous les types spécifiés dans la bibliothèque standard C++ sont des types non- final .

(depuis C++11)

Si une fonction définie dans la bibliothèque standard C++ est spécifiée pour lever une exception (dans une situation particulière) d'un type donné, l'exception levée ne peut avoir que ce type ou un type dérivé de ce type afin qu'un gestionnaire d'exception pour le type de base puisse l'intercepter.

Les fonctions de la bibliothèque standard C ne peuvent lever des exceptions que lorsqu'une telle fonction appelle une fonction fournie par le programme qui lève une exception ( qsort() et bsearch() remplissent cette condition).

Les opérations de destructeur définies dans la bibliothèque standard C++ ne lèvent jamais d'exceptions. Chaque destructeur dans la bibliothèque standard C++ se comporte comme s'il avait une spécification d'exception non levante .

Si une fonction de la bibliothèque standard C++ signale des erreurs via un objet std::error_code , la fonction membre category() de cet objet doit retourner std::system_category() pour les erreurs provenant du système d'exploitation, ou une référence à un objet std::error_category défini par l'implémentation pour les erreurs provenant d'ailleurs. Les valeurs possibles de value() pour chacune de ces catégories d'erreur doivent être définies.

Les objets de types définis dans la bibliothèque standard C++ peuvent être déplacés . Les opérations de déplacement peuvent être spécifiées explicitement ou générées implicitement. Sauf indication contraire, ces objets déplacés seront placés dans un état valide mais non spécifié.

Un objet d'un type défini dans la bibliothèque standard C++ peut être affecté par déplacement à lui-même. Sauf indication contraire, une telle affectation place l'objet dans un état valide mais non spécifié.

(depuis C++11)

Liberté d'implémentation

Il n'est pas spécifié si des fonctions membres ou non membres de la bibliothèque standard C++ sont définies comme inline .

Pour une fonction membre de la bibliothèque standard C++ non virtuelle , un ensemble différent de signatures de fonctions membres peut être déclaré, à condition que tout appel à cette fonction membre qui sélectionnerait une surcharge parmi l'ensemble de déclarations donné se comporte comme si cette surcharge avait été sélectionnée. Cela permet, par exemple :

  • ajouter des paramètres avec des arguments par défaut,
  • remplacer une fonction membre avec des arguments par défaut par deux ou plusieurs fonctions membres avec un comportement équivalent, ou
  • ajouter des signatures supplémentaires pour un nom de fonction membre.

Sauf indication contraire, il est défini par l'implémentation quelles fonctions de la bibliothèque standard C++ peuvent être réentrées récursivement.

Les implémentations de la bibliothèque standard C++ peuvent partager leurs propres objets internes entre les threads si ces objets ne sont pas visibles par les utilisateurs et sont protégés contre les courses de données.

(depuis C++11)

Il n'est pas spécifié si une signature de fonction ou une classe de la bibliothèque standard C++ est une amie d'une autre classe de la bibliothèque standard C++.

Les noms et les signatures de fonctions globales décrits ici sont réservés à l'implémentation.

Toute classe de la bibliothèque standard C++ peut être dérivée d'une classe dont le nom est réservé à l'implémentation. Si une classe définie dans la bibliothèque standard C++ doit être dérivée d'autres classes de la bibliothèque standard C++, cette classe peut être dérivée directement de la classe de base requise ou indirectement via une hiérarchie de classes de base dont les noms sont réservés à l'implémentation.

Si une fonction définie dans la bibliothèque standard C++ n'est pas spécifiée pour lever une exception mais ne possède pas de spécification d'exception non levante, l'exception levée est définie par l'implémentation, mais son type devrait être std::exception ou tout type dérivé de std::exception .

La spécification d'exception pour une fonction non virtuelle peut être renforcée en ajoutant une spécification d'exception non levante.

Renforcement de la bibliothèque standard

Une implémentation peut être une implémentation renforcée  , le fait que l'implémentation soit renforcée est défini par l'implémentation.

Certaines fonctions membres de la bibliothèque standard (et modèles de fonctions membres) possèdent des préconditions renforcées  . Lorsqu'une telle fonction est appelée :

  • Si l'implémentation est durcie, avant tout autre effet secondaire observable de la fonction, une ou plusieurs assertions de contrat dont les prédicats sont décrits dans le précondition durcie sont évaluées avec une sémantique de vérification. Si l'une de ces assertions est évaluée avec une sémantique non-terminante et que le gestionnaire de violation de contrat retourne, le comportement est indéfini.
  • Si l'implémentation n'est pas durcie, lorsqu'une précondition durcie est violée, le comportement est indéfini.

Fonctions membres avec préconditions renforcées

**Note:** Aucune traduction n'a été effectuée car : - Le texte "back" est un terme spécifique C++ (fonction membre des conteneurs) - Tout le contenu se trouve dans des balises ` `, ` ` ou `
` (implicite)
- Les balises HTML et attributs ont été préservés comme demandé
Catégorie Conteneurs de séquence Vues de conteneurs Classes de chaîne (vue) Utilitaires généraux
Tableaux numériques
Classe array vector inplace_vector deque list forward_list span mdspan basic_string basic_string_view bitset optional expected valarray
(constructeur) span mdspan
Accès aux
éléments
operator* operator* operator*
operator-> operator-> operator->
operator[] operator[] operator[] operator[] operator[] operator[] operator[] operator[] operator[] operator[] operator[]
front front front front front front front front front front
back back back back back back back back back
error error
Vues partielles first first
last last
subspan subspan
Modificateurs pop_front pop_front pop_front pop_front
pop_back pop_back pop_back pop_back pop_back pop_back
remove_prefix remove_prefix
remove_suffix remove_suffix
(depuis C++26)

Notes

libstdc++ , libc++ , et STL prennent tous en charge l'utilisation des modules de bibliothèque standard en mode C++20.

Macro de test de fonctionnalité Valeur Std Fonctionnalité
__cpp_lib_modules 202207L (C++23) Modules de bibliothèque standard std et std. compat
Implémentation durcie uniquement
__cpp_lib_hardened_array 202502L (C++26) std::array durci
__cpp_lib_hardened_basic_string 202502L (C++26) std::basic_string durci
__cpp_lib_hardened_basic_string_view 202502L (C++26) std::basic_string_view durci
__cpp_lib_hardened_bitset 202502L (C++26) std::bitset durci
__cpp_lib_hardened_deque 202502L (C++26) std::deque durci
__cpp_lib_hardened_expected 202502L (C++26) std::expected durci
__cpp_lib_hardened_forward_list 202502L (C++26) std::forward_list durci
__cpp_lib_hardened_inplace_vector 202502L (C++26) std::inplace_vector durci
__cpp_lib_hardened_list 202502L (C++26) std::list durci
__cpp_lib_hardened_mdspan 202502L (C++26) std::mdspan durci
__cpp_lib_hardened_optional 202502L (C++26) std::optional durci
__cpp_lib_hardened_span 202502L (C++26) std::span durci
__cpp_lib_hardened_valarray 202502L (C++26) std::valarray durci
__cpp_lib_hardened_vector 202502L (C++26) std::vector durci

Rapports de défauts

Les rapports de défauts modifiant le comportement suivants ont été appliqués rétroactivement aux normes C++ précédemment publiées.

DR Applicable à Comportement publié Comportement corrigé
LWG 1 C++98 les liaisons linguistiques des noms de
la bibliothèque standard C n'étaient pas spécifiées
elles sont
définies par l'implémentation
LWG 119 C++98 les spécifications d'exception des fonctions
virtuelles pouvaient être renforcées
uniquement autorisé pour
les fonctions non virtuelles
LWG 147 C++98 la spécification sur les fonctions non membres
ne considérait que les fonctions globales
prend également en compte
les fonctions non globales
LWG 225 C++98 les fonctions de la bibliothèque standard pouvaient appeler des fonctions non membres
d'autres espaces de noms en raison de la recherche dépendante de l'argument
interdit sauf
spécification contraire
LWG 336 C++98 <strstream> n'était pas un en-tête de bibliothèque C++ c'est un en-tête de bibliothèque C++
LWG 343 C++98 les dépendances des en-têtes de bibliothèque n'étaient pas spécifiées spécifiées (listées dans les synopsis)
LWG 456 C++98 les en-têtes C++ pour les fonctionnalités de bibliothèque C pouvaient
uniquement fournir des définitions dans l'espace de noms std
autorisé à définir dans l'espace de noms global
puis injecter dans l'espace de noms std
LWG 465 C++98 les identifiants qui sont des mots-clés ou opérateurs en C++ pouvaient
être définis comme macros dans les en-têtes de bibliothèque standard C++
(seul <ciso646> est requis de ne pas les définir comme macros)
tous les en-têtes de bibliothèque
standard C++ ne peuvent pas
les définir comme macros
LWG 1178 C++98 les en-têtes C++ doivent inclure un en-tête C++
qui contient toute définition nécessaire
les en-têtes C++ doivent fournir les déclarations
et définitions qui sont directement ou
indirectement incluses dans son synopsis
LWG 2013 C++11 il n'était pas spécifié si les fonctions non
requises par la norme à être constexpr peuvent
être déclarées constexpr par la bibliothèque standard
interdit
LWG 2225 C++98 un diagnostic était requis si un en-tête
est inclus à une position incorrecte
aucun diagnostic n'est
requis dans ce cas