Namespaces
Variants

Compiler support for C++20

From cppreference.net

* - survolez une cellule marquée d'une étoile * pour voir des notes contextuelles supplémentaires.
DR nn - le nombre nn après "DR" désigne la révision C++ cible à laquelle le Rapport de Défaut est appliqué, par exemple, DR20 → C++20.

Fonctionnalités fondamentales du langage C++20

Fonctionnalité C++20

Document(s)

GCC
Clang
MSVC
Apple Clang
EDG eccp
Intel C++
Nvidia HPC C++ (ex PGI)*
Nvidia nvcc
Cray
Autoriser Capture lambda [ = , this ] P0409R2 8 6 19.22* 10.0.0* 5.1 2021.1 20.7 12.0 11.0
__VA_OPT__ P0306R4
P1042R1
8 (partiel)*
10 (partiel)*
12
9 19.25* 11.0.3* 5.1 2021.1 20.7 12.0 11.0
Initialisateurs désignés ( FTM ) * P0329R4 4.7 (partiel)*
8
3.0 (partiel)*
10
19.21* 12.0.0* 5.1 2021.1 20.7 12.0 11.0
liste de paramètres de template pour les lambdas génériques ( FTM ) * P0428R2 8 9 19.22* 11.0.0* 5.1 2021.1 20.7 12.0 11.0
Initialisateurs de membres par défaut pour les champs de bits P0683R1 8 6 19.25* 10.0.0* 5.1 2021.1 20.7 12.0 11.0
Constructeurs de liste d'initialisation dans la déduction d'argument de classe template P0702R1 8 6 19.14* Oui 5.0 2021.1 20.7 12.0 11.0
const & - pointeurs vers membres qualifiés const P0704R1 8 6 19.0 (2015)* 10.0.0* 5.1 2021.1 20.7 12.0 11.0
Concepts ( FTM ) * P0734R0 5*
10
10 19.23* (partiel)*
19.30*
12.0.0* (partiel) 6.1 2023.1* 20.11 12.0 11.0
Lambdas dans des contextes non évalués P0315R4 9 13 (partiel)*
14 (partiel)*
17
19.28 (16.8)* 13.1.6* (partiel) 6.2 2023.1 (partiel)
2024.0
20.7 12.0
Opérateur de comparaison à trois voies ( FTM ) * P0515R3 10 8 (partiel)
10
19.20* 12.0.0* 5.1 2021.1 20.7 12.0 11.0
DR11 : Simplification de la capture implicite des lambda P0588R1 8 19.24* 5.1 2021.1 20.7 12.0
instructions d'initialisation pour la boucle for basée sur des intervalles P0614R1 9 8 19.25* 11.0.0* 6.0 2021.7 20.11 12.0 11.0
Constructible par défaut et assignable sans état lambdas P0624R2 9 8 19.22* 10.0.1* 5.1 2021.1 20.7 12.0 11.0
Incompatibilité de type des fonctions membres spéciales par défaut P0641R2 9 (partiel)* 8 19.0 (2015)* (partiel)* 10.0.1* 5.1 2021.1 20.7 12.0 11.0
Vérification d'accès sur les spécialisations P0692R1 Oui 8 (partiel)
14
19.26* 14.0.0* 5.1 2021.1 20.7 12.0
ADL et modèles de fonction non visibles P0846R0 9 9 19.21* 11.0.3* 5.1 2021.1 20.7 12.0 11.0
DR11 : Spécifier quand les définitions de fonctions constexpr sont nécessaires pour l'évaluation constante ( FTM ) * P0859R0 5.2 (partiel)*
9
8 19.27* (partiel)*
19.31* *
11.0.0* (partiel) 12.0 11.0
Attributs [[ likely ]] et [[ unlikely ]] P0479R5 9 12 19.26* 13.0.0* 5.1 2021.7 20.7 12.0
Rendre typename plus optionnel P0634R3 9 16 19.29 (16.10)* 16.0.0* 5.1 2023.1 20.7 12.0
Pack-expansions dans lambda init-captures ( FTM ) * P0780R2 9 9 19.22* 11.0.3* 6.1 2021.7 20.11 12.0 11.0
Attribut [[ no_unique_address ]] P0840R2 9 9 19.28 (16.9)* * 11.0.3* 5.1 2021.1 20.7 12.0 11.0
Fonctions membres spéciales conditionnellement triviales  ( FTM ) * P0848R3 10 16 19.28 (16.8)* 6.1 2021.7 20.11 12.0
DR17 : Assouplissement des règles de recherche du point de personnalisation des structured bindings P0961R1 8 8 19.20* 10.0.1* 5.1 2021.1 20.7 12.0 11.0
DR11 : Assouplissement des règles de recherche du point de personnalisation range-for P0962R1 8 8 19.25* 11.0.0* 5.1 2021.1 20.7 12.0 11.0
DR17 : Autoriser les liaisons structurées pour les membres accessibles P0969R0 8 8 19.20* 10.0.1* 5.1 2021.1 20.7 12.0 11.0
Opérateur operator delete destructeur ( FTM ) * P0722R3 9 6 19.27* 10.0.0* 6.1 2023.1 20.11 12.0 11.0
Types de classe dans Paramètres de template constants P0732R2 9 12 (partiel) 19.26* (partiel)*
19.28 (16.9)*
13.0.0* (partiel) 6.2 2023.1 (partiel) 21.3 12.0
Déprécier la capture implicite capture de this via [=] P0806R2 9 7 19.22* 10.0.1* 5.1 20.7 12.0 11.0
explicit(bool) ( FTM ) * P0892R2 9 9 19.24* 11.0.3* 5.1 2021.1 20.7 12.0 11.0
Intégration des macros de test de fonctionnalités P0941R2 5 3.4 19.15* (partiel)
19.20*
Oui 5.0 2021.1 20.7 12.0 11.0
Interdire les agrégats avec des constructeurs déclarés par l'utilisateur P1008R1 9 8 19.20* 10.0.1* 5.1 2021.1 20.7 12.0 11.0
constexpr fonction virtuelle ( FTM ) * P1064R0 9 9 19.28 (16.9)* 11.0.3* 5.1 2021.1 20.7 12.0 11.0
Améliorations de cohérence pour les comparaisons P1120R0 10 8 (partiel)
10
19.22* 12.0.0* 5.1 2023.1 20.7 12.0 11.0
char8_t ( FTM ) * P0482R6 9 7* 19.22* 10.0.0* 5.1 2021.1 20.7 12.0 11.0
std::is_constant_evaluated() ( FTM ) * P0595R2 9 9 19.25* 11.0.3* 5.1 19.1 21.1 12.0 11.0
constexpr try - catch blocs P1002R1 9 8 19.25* 10.0.1* 5.1 2023.1 20.7 12.0 11.0
Fonctions immédiates ( consteval )  ( FTM ) * P1073R3 10 (partiel)*
11
11 (partiel)
14 (partiel)*
17
19.28 (16.8)*
(partiel)*

19.29 (16.10)*
11.0.3* (partiel)
15.0.0*
5.1 2021.1 20.7 12.0
Espaces de noms imbriqués en ligne P1094R2 9 8 19.27* 10.0.1* 5.1 2021.1 20.7 12.0 11.0
Une autre approche pour les déclarations contraintes auto P1141R2 10 10 19.26* (partiel)
19.28 (16.9)*
12.0.5* 6.1 2023.1 20.11 12.0 11.0
Les entiers signés utilisent la représentation en complément à deux P1236R1 9 9 Oui 11.0.3* N/A 2023.1* oui* 12.0 11.0
dynamic_cast et polymorphique typeid dans les expressions constantes P1327R1 10 9 19.28 (16.9)* 11.0.3* 5.1 2021.1 20.7 12.0 11.0
Modification du membre actif d'une union dans constexpr ( FTM ) * P1330R0 9 9 19.10* 11.0.3* 5.1 2021.1 20.7 12.0 11.0
Coroutines ( FTM ) * ( FTM ) * P0912R5
LWG3393
10 8 (partiel)
17 (partiel)*
19.0 (2015)* (partiel)
19.10* *
19.28 (16.8)*
10.0.1* (partiel) 5.1 2021.1 23.3* 12.0 (code hôte uniquement)
Initialisation entre parenthèses des agrégats ( FTM ) * P0960R3 10 16 19.28 (16.8)* 16.0.0* 5.1 2021.1 20.7 12.0
DR11 : Déduction de la taille de tableau dans les new -expressions P1009R2 11 9 19.27* 11.0.3* 5.1 2021.1 20.7 12.0 11.0
Modules ( FTM ) * P1103R3 11 (partiel) 8 (partiel) 19.0 (2015)* (partiel)
19.10* *
19.28 (16.8)*
10.0.1* (partiel) 2023.1 (partiel)
Exigences Unicode renforcées P1041R4
P1139R2
10 Oui 19.0 (2015)* *
19.26* *
Oui N/A 2023.1* Oui 12.0 11.0
<=> != == P1185R2 10 10 19.22* 12.0.0* 5.1 2021.1 20.7 12.0 11.0
DR11 : Fonctions explicitement définies par défaut avec des spécifications d'exception différentes P1286R2 10 9 19.28 (16.8)* 11.0.3* 5.1 2021.1 20.7 12.0 11.0
Capture des lambdas et spécificateurs de classe de stockage des liaisons structurées P1091R3
P1381R1
10 8 (partiel)
16
19.11* *
19.24* *
16.0.0* 5.1 2021.1 20.7 12.0
Permettre les conversions vers des tableaux de taille inconnue P0388R4 10 14 19.27* 14.0.0* 6.0 2021.5 20.11 12.0
constexpr opérations de conteneur  ( FTM ) * P0784R7 10 10 19.28 (16.9)* 12.0.0* 6.0 2021.5 20.11 12.0 11.0
Dépréciation de certaines utilisations de volatile P1152R4 10 10 19.27* 12.0.0* 6.0 2021.5 20.11 12.0 11.0
constinit ( FTM ) * P1143R2 10 10 19.29 (16.10)* 12.0.0* 6.1 2021.7 20.11 12.0 11.0
Déprécier l'opérateur virgule dans les indices P1161R3 10 9 19.25* 11.0.3* 6.0 2021.7 20.11 12.0 11.0
[[ nodiscard ]] avec message P1301R4 10 9 19.25* 11.0.3* 6.0 2021.5 20.11 12.0 11.0
Initialisation par défaut triviale dans les fonctions constexpr P1331R2 10 10 19.27* 12.0.0* 6.1 2021.7 20.11 12.0 11.0
Déclaration asm non évaluée dans les fonctions constexpr P1668R1 10 10 19.28 (16.9)* 12.0.0* 6.1 2021.7 20.11 12.0 11.0
using enum ( FTM ) * P1099R5 11 13 19.24* 13.1.6* 6.3 2023.1 22.5 12.0
Synthèse de la comparaison à trois voies pour la catégorie de comparaison spécifiée P1186R3 11 10 19.24* 12.0.0* 6.0 2021.5 20.11 12.0 11.0
DR17 : [[ nodiscard ]] pour les constructeurs P1771R1 10 9 19.24* 11.0.3* 6.0 2021.5 20.11 12.0 11.0
déduction d'arguments de modèle de classe pour les modèles d'alias  ( FTM ) * P1814R0 10 19 19.27* 6.5 23.9 12.0
déduction d'arguments de modèle de classe pour les agrégats  ( FTM ) * P1816R0
P2082R1
10*
11*
17 19.27* 6.3 2023.1 (partiel)*
2024.1
23.3 12.0
DR11: Déplacement implicite pour plus d'objets locaux et de références rvalue P1825R0 11* 13 19.24* 13.1.6* 6.0 2021.5 20.11 12.0
Autoriser la comparaison par défaut par valeur P1946R0 10 10 19.25* 12.0.0* 6.1 2021.7 20.11 12.0 11.0
Supprimer std::weak_equality et std::strong_equality P1959R0 10 10 19.25* 12.0.0* 6.1 2021.7 20.11 12.0 11.0
Incohérences avec les paramètres de template constants  ( FTM ) * P1907R1 10 (partiel)
11
18 (partiel)* 19.26* 13.1.6* (partiel) 6.2 2023.1 (partiel) 21.3 12.0
DR98 : Les pseudo-destructeurs terminent les durées de vie des objets P0593R6 11 11 Oui 12.0.5* N/A 2023.1* Oui 12.0 11.0
DR11 : La conversion de T * vers bool devrait être considérée comme un rétrécissement P1957R2 10*
11*
11 19.27* 12.0.5* 6.1 12.0 11.0


Fonctionnalité C++20


Document(s)
GCC
Clang
MSVC
Apple Clang
EDG eccp
Intel C++
Nvidia HPC C++ (ex PGI)*
Nvidia nvcc
Cray

Fonctionnalités de la bibliothèque C++20

**Traductions effectuées :** - "Feature-testing macro" → "Macro de test de fonctionnalité" - Les termes C++ (`std::bit_cast()`, `FTM`, `__cpp_lib_bit_cast`, `P0476R2`) et les numéros de version ont été conservés en anglais - La structure HTML et les attributs sont restés inchangés **Modifications apportées :** - Traduction du texte dans l'attribut `title` : "Feature-testing macro" → "Macro de test de fonctionnalité" - Conservation de tous les termes C++ (`std::execution::unseq`, `FTM`, `__cpp_lib_execution`, `P1001R2`) - Préservation de tous les tags HTML et attributs - Maintien du texte dans les balises ` `, ` ` et `
` (bien qu'il n'y en ait pas dans cet extrait)
**Notes sur la traduction :** - `std::to_array()` et `FTM` sont conservés tels quels (termes C++ spécifiques) - `Feature-testing macro` a été traduit par `Macro de test de fonctionnalité` - Toutes les balises HTML, attributs et contenu des balises ` `, `
`, `` sont préservés
- La structure et le formatage HTML d'origine sont maintenus
**Traductions effectuées :** - "and related utilities" → "et utilitaires associés" - "Feature-testing macro" → "Macro de test de fonctionnalité" **Éléments préservés :** - Toutes les balises HTML et attributs - Le contenu des balises ` ` (bien qu'il n'y en ait pas d'explicites ici, `constexpr` et `std::allocator` sont dans des spans spécifiques) - Les termes C++ (`constexpr`, `std::allocator`, `__cpp_lib_constexpr_dynamic_alloc`) - La mise en forme et la structure HTML originales - Les numéros de versions et références techniques
Fonctionnalité C++20

Document(s)

GCC libstdc++
Clang libc++
MSVC STL
Apple Clang*
std::endian ( FTM ) * P0463R1 8 7 19.22* 10.0.0*
Extension de std::make_shared() pour prendre en charge les tableaux  ( FTM ) * P0674R1 12 15 19.27* 14.0.3*
Atomique à virgule flottante ( FTM ) * P0020R6 10 18 19.22* 16.0.0*
Tampon synchronisé ( std::basic_osyncstream )  ( FTM ) * P0053R7 11 18 19.29 (16.10)*
constexpr pour <algorithm> et <utility> ( FTM ) * P0202R3 10 8 (partiel)
12
19.26* 10.0.1* (partiel)
13.0.0*
Davantage de constexpr pour <complex> ( FTM ) * P0415R1 9 7 (partiel)
16
19.27* 10.0.0* (partiel)
15.0.0*
Faire de std::memory_order une énumération scopée P0439R0 9 9 19.25* 11.0.3*
Chaîne préfixe et suffixe vérification : string (_view) ::starts_with / ends_with ( FTM ) * P0457R2 9 6 19.21* 10.0.0*
Support de la bibliothèque pour operator<=> <compare> ( FTM ) * P0768R1 10 7 (partiel)
12 (partiel)*
17
19.20* (partiel)
19.28 (16.9)*
13.0.0*
std::remove_cvref ( FTM ) * P0550R2 9 6 19.20* 10.0.0*
[[ nodiscard ]] dans la bibliothèque standard P0600R1 9 7 (partiel)
16
19.13* (partiel)
19.22*
10.0.0* (partiel)
15.0.0*
Utilisation de std::move dans les algorithmes numériques P0616R0 9 12 19.23* 13.0.0*
Utilitaire pour convertir un pointeur en pointeur brut  ( FTM ) * P0653R2 8 6 19.22* Oui
Atomique std::shared_ptr et std::weak_ptr ( FTM ) * P0718R2 12 19.27*
std::span ( FTM ) * P0122R7 10 7 19.26* 10.0.0*
Calendrier et Fuseau horaire ( FTM ) * P0355R7 11 (partiel)*
13 (partiel)*
14
7 (partiel)
19 ( partiel )*
19.29 (16.10)* 10.0.0* (partiel)
<version> P0754R2 9 7 19.22* 10.0.0*
Comparaison des conteneurs non ordonnés P0809R0 Oui Oui 16.0* Oui
ConstexprIterator exigences  ( FTM ) * ( FTM ) * P0858R0 9 12 19.11* 13.0.0*
std::basic_string::reserve() ne doit pas réduire P0966R1 11 8 19.25* 10.0.1*
Échange et comparaison atomique avec bits de remplissage P0528R3 13 19.28 (16.8)*
std::atomic_ref ( FTM ) * P0019R8 10 19 19.28 (16.8)*
contains ( ) fonction membre des conteneurs associatifs, par ex. std::map::contains() P0458R2 9 13 19.21* 13.1.6*
DR11 : Élimination garantie de la copie pour la construction par morceaux P0475R1 9 Oui 19.29 (16.10)* Oui
std::bit_cast() ( FTM ) * P0476R2 11 14 19.27* 14.0.3*
Opérations de puissance de 2 entière :

std::bit_ceil() , std::bit_floor() , std::bit_width() , std::has_single_bit() ( FTM ) *

P0556R3
P1956R1
9*
10*
9*
12*
19.25* *
19.27* *
19.28 (16.8)*
11.0.3* *
13.0.0* *
Amélioration de la valeur de retour des algorithmes de type erase  ( FTM ) * P0646R1 9 10 19.21* 12.0.0*
std::destroying_delete_t ( FTM ) * P0722R3 9 9 19.27* 11.0.3*
std::is_convertible ( FTM ) * P0758R1 9 9 19.23* 11.0.3*
Ajouter std::shift_left/right à <algorithm> ( FTM ) * P0769R2 10 12 19.21* 13.0.0*
Constexpr pour std::swap() et les fonctions liées à swap P0879R0 10 13 19.26* 13.1.6*
std::type_identity ( FTM ) * P0887R1 9 8 19.21* 10.0.1*
Bibliothèque de concepts ( FTM ) * P0898R3 10 13 19.23* 13.1.6*
constexpr opérateurs de comparaison pour std::array P1023R0 10 8 19.27* 10.0.1*
std::unwrap_ref_decay et std::unwrap_reference ( FTM ) * P0318R1 9 8 19.21* 10.0.1*
std::bind_front() ( FTM ) * P0356R5 9 13 19.25* 13.1.6*
std::reference_wrapper pour les types incomplets P0357R3 9 8 19.26* 10.0.1*
Correction de operator>>(basic_istream&, CharT*) P0487R1 11 8 19.23* 10.0.1*
Support de la bibliothèque pour char8_t ( FTM ) * P0482R6 9 8 (partiel)
16
19.22* 10.0.1* (partiel)
15.0.0*
Fonctions utilitaires pour implémenter la construction uses-allocator P0591R4 9 16 19.29 (16.10)* 15.0.0*
DR17 : std::variant et std::optional doivent propager la trivialité de copie/déplacement P0602R4 8.3 8 19.11* 10.0.1*
DR17 : Un constructeur de conversion sensé pour std::variant P0608R3 10 9 19.29 (16.10)* *
19.42* *
11.0.3*
std::function Le constructeur de déplacement de noexcept devrait être P0771R1 7.2 6 19.22* Oui
La Proposition Ranges Unifiés ( FTM ) * P0896R4 10 13 (partiel)
15*
19.29 (16.10)* 14.0.3*
Recherche hétérogène pour conteneurs associatifs non ordonnés ( FTM ) * P0919R3
P1690R1
11 12 19.23* (P0919R3)
19.25* (P1690R1)
13.0.0*
<chrono> zero() , min() , et max() devraient être noexcept P0972R0 9 8 19.14* 10.0.1*
constexpr dans std::pointer_traits ( FTM ) * P1006R1 9 8 19.26* 10.0.1*
std::assume_aligned() ( FTM ) * P1007R3 9*
11
15 19.28 (16.9)* 14.0.3*
Création de pointeurs intelligents avec initialisation par défaut (par ex. make_unique_for_overwrite )  ( FTM ) * P1020R1
P1973R1
11*
12*
16 19.28 (16.9)* 15.0.0*
Divers constexpr bits  ( FTM ) * ( FTM ) * ( FTM ) * ( FTM ) * ( FTM ) * ( FTM ) * P1032R1 10 13 19.28 (16.8)* 13.1.6*
Supprimer les opérateurs de comparaison de std::span P1085R2 10 8 19.26* 10.0.1*
Rendre la propagation des allocateurs avec état plus cohérente pour operator+(basic_string) P1165R1 10 15 19.26* 14.0.3*
Élimination cohérente des conteneurs, par ex. std::erase(std::vector) , ou std::erase_if(std::map) ( FTM ) * P1209R0
P1115R3
9*
10*
8*
11*
19.25* *
19.27* *
10.0.1* *
12.0.5* *
Unités d'en-tête de la bibliothèque standard P1502R1 11 19.29 (16.10)*
polymorphic_allocator<> en tant que type de vocabulaire  ( FTM ) * P0339R6 9 16 19.28 (16.9)* 15.0.0*
std::execution::unseq ( FTM ) * P1001R2 9 17 19.28 (16.8)*
std::lerp() et std::midpoint() ( FTM ) * P0811R3 9 9 19.23* (partiel)
19.28 (16.8)*
11.0.3*
Améliorations de l'utilisabilité pour std::span P1024R3 10 9*
14
19.26* 11.0.3*
DR17 : Rendre std::create_directory() intuitif P1164R1 8.3 12 19.20* 13.0.0*
std::ssize() et étendue non signée pour std::span ( FTM ) * P1227R2 10 9 19.25* 11.0.3*
Traits pour les tableaux ( non ) bornés ( FTM ) * P1357R1 9 9 19.25* 11.0.3*
std::to_array() ( FTM ) * P0325R4 10 10 19.25* 12.0.0*
Accès efficace au tampon de std::basic_stringbuf P0408R7 11 17 19.29 (16.10)* 15.0.0*
Compatibilité - de disposition et interconvertibilité - de pointeurs traits  ( FTM ) * ( FTM ) * P0466R5 12 19.29 (16.10)* *
Opérations binaires : std ::

rotl() , rotr() , countl_zero() , countl_one() , countr_zero() , countr_one() , popcount() ( FTM ) *

P0553R4 9 9 19.25* *
19.28 (16.8)*
11.0.3*
Constantes mathématiques ( FTM ) * P0631R8 10 11 19.25* 12.0.5*
Formatage de texte ( FTM ) * P0645R10 13 14 * *
17
19.29 (16.10)* 15.0.0*
std::stop_token et std::jthread ( FTM ) * P0660R10 10 17
(partiel)*

20*
19.28 (16.9)*
constexpr std::allocator et utilitaires associés  ( FTM ) * P0784R7 10 12 19.29 (16.10)* 13.0.0*
constexpr std::string ( FTM ) * P0426R1
P1032R1
P0980R1
12 15 19.29 (16.10)*
19.30* *
14.0.3*
constexpr std::vector ( FTM ) * P1004R2 12 15 19.29 (16.10)*
19.30* *
14.0.3*
Entrée adaptateurs de plages P1035R7 10 16 19.29 (16.10)* 15.0.0*
constexpr std::invoke() et utilitaires associés P1065R2 10 12 19.28 (16.8)* 13.0.0*
Attente et notification atomiques, std::counting_semaphore , std::latch et std::barrier ( FTM ) * ( FTM ) * ( FTM ) * ( FTM ) * ( FTM ) * ( FTM ) * P1135R6 11 11 19.28 (16.9)* 13.1.6*
std::source_location ( FTM ) * P1208R6 11 15*
(partiel)
16
19.29 (16.10)* 15.0.0*
Ajout de <=> à la bibliothèque standard P1614R2 10 14*
(partiel)
17*
(partiel)
19
19.29 (16.10)* 13.1.6* (partiel)
constexpr constructeur par défaut de std::atomic et std::atomic_flag ( FTM ) * P0883R2 10 13 19.26* 13.1.6*
constexpr pour algorithmes numériques ( FTM ) * P1645R1 10 12 19.26* 13.0.0*
Comparaisons sécurisées d'entiers ( FTM ) * P0586R2 10 13 19.27* 13.1.6*


Fonctionnalité C++20


Document(s)
GCC libstdc++
Clang libc++
MSVC STL
Apple Clang*