Namespaces
Variants

Compiler support for C++17

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 principales du langage C++17

**Traductions effectuées :** - "lambda expressions" → "expressions lambda" - "Feature-testing macro" → "Macro de test de fonctionnalité" - "Yes" → "Oui" **Éléments préservés :** - Toutes les balises HTML et attributs - Le contenu des balises ` ` (constexpr) - Les termes spécifiques C++ (FTM, __cpp_constexpr) - La numérotation et les valeurs techniques - La mise en forme originale
Fonctionnalité C++17

Document(s)

GCC
Clang
MSVC
Apple Clang
EDG eccp
Intel C++
Nvidia HPC C++ (ex PGI)*
Nvidia nvcc
Cray
Embarcadero C++ Builder
IBM Open XL C++ for AIX
DR11 : Nouvelles règles pour auto dans l'initialisation directe par liste N3922 5 3.8 19.0 (2015)* Oui 4.10.1 17.0 17.7 11.0 11.0 10.3 17.1.0
typename dans un paramètre de template template N4051 5 3.5 19.0 (2015)* Oui 4.10.1 17.0 17.7 Oui* 11.0 10.3 17.1.0
Suppression des trigraphs N4086 5 3.5 16.0* Oui 5.0 19.1 11.0 11.0 10.3 17.1.0
Définition d'espace de noms imbriqué N4230 6 3.6 19.0 (Update 3)* Oui 4.12 17.0 17.7 11.0 11.0 10.3 17.1.0
static_assert sans message  ( FTM ) * N3928 6 2.5 19.10* Oui 4.12 18.0 17.7 11.0 11.0 10.3 17.1.0
Attributs pour les espaces de noms et les énumérateurs  ( FTM ) * ( FTM ) * N4266 4.9 (partiel)*
6
3.6 19.0 (2015)* Oui 4.11 17.0 17.7 11.0 11.0 10.3 17.1.0
u8 littéraux de caractères N4267 6 3.6 19.0 (2015)* Oui 4.11 17.0 17.7 11.0 11.0 10.3 17.1.0
Autoriser l'évaluation constante pour tous les arguments de template constants  ( FTM ) * N4268 6 3.6 19.12* Oui 5.0 19.0.1 19.1 11.0 11.0 10.3 17.1.0
Expressions de repli unaires et packs de paramètres vides P0036R0 6 3.9 19.12* Oui 4.14 19.0 19.1 11.0 11.0 10.3 17.1.0
Supprimer l'utilisation obsolète du mot-clé register P0001R1 7 3.8 19.11* Oui 4.13 18.0 17.7 11.0 11.0 10.3 17.1.0
Supprimer l'opérateur déprécié operator ++ ( bool ) P0002R1 7 3.8 19.11* Oui 4.13 18.0 17.7 11.0 11.0 10.3 17.1.0
Intégrer les spécifications d'exception au système de type  ( FTM ) * P0012R1 7 4 19.12* Oui 4.14 19.0 19.1 11.0 11.0 10.3 17.1.0
__has_include dans les conditionnelles du préprocesseur P0061R1 5 Oui 19.11* Oui 4.13 18.0 17.7 11.0 11.0 10.3 17.1.0
DR11 : Nouvelle spécification pour les constructeurs hérités ( DR1941 et al)  ( FTM ) * P0136R1 7 3.9 19.14* * Oui 6.1 19.1 11.0 11.0 10.3 17.1.0
Classes agrégées avec classes de base  ( FTM ) * P0017R1 7 3.9 19.14* Oui 5.0 19.0.1 19.1 11.0 11.0 10.3 17.1.0
Expressions de repli ( FTM ) * N4295 6 3.6 19.12* Oui 4.14 19.0 18.1 11.0 11.0 10.3 17.1.0
Capture lambda de * this ( FTM ) * P0018R3 7 3.9 19.11* Oui 4.14 19.0 18.1 11.0 11.0 10.3 17.1.0
Initialisation directe par liste des énumérations P0138R2 7 3.9 19.11* Oui 4.14 18.0 19.1 11.0 11.0 10.3 17.1.0
constexpr expressions lambda ( FTM ) * P0170R1 7 5 19.11* Oui 4.14 19.0 18.1 11.0 11.0 10.3 17.1.0
Types différents pour begin et end dans la boucle range-based for ( FTM ) * P0184R0 6 3.9 19.10* Oui 4.12 18.0 17.7 11.0 11.0 10.3 17.1.0
[[ fallthrough ]] attribut P0188R1 7 3.9 19.10* Oui 4.13 18.0 17.7 11.0 11.0 10.3 17.1.0
[[ nodiscard ]] attribut P0189R1 7 3.9 19.11* Oui 4.13 18.0 17.7 11.0 11.0 10.3 17.1.0
[[ maybe_unused ]] attribut P0212R1 7 3.9 19.11* Oui 4.13 18.0 17.7 11.0 11.0 10.3 17.1.0
Littéraux flottants hexadécimaux ( FTM ) * P0245R1 3.0 Oui 19.11* Oui 4.13 18.0 17.7 11.0 11.0 10.3 17.1.0
Utilisation des espaces de noms d'attributs sans répétition P0028R4 7 3.9 19.11* Oui 4.13 18.0 17.7 11.0 11.0 10.3 17.1.0
Allocation dynamique de mémoire pour les données sur-alignées  ( FTM ) * P0035R4 7 4 19.12* 10.0.0* 4.14 19.0 19.1 11.0 11.0 10.3 17.1.0
Paramètres de template constants avec type auto ( FTM ) * P0127R2 7 4 19.14* Oui 5.0 19.0.1 19.1 11.0 11.0 10.3 17.1.0
Élimination garantie des copies ( FTM ) * P0135R1 7 4 19.13* Oui 5.0 19.0.1 19.1 11.0 11.0 10.3 17.1.0
Remplacement des objets de classe contenant des membres référence P0137R1 7 6 19.14* Oui 5.0 19.1 11.0 11.0 10.3 17.1.0
Ordre d'évaluation des expressions plus strict expression evaluation order P0145R3 7 4 19.14* Oui 5.0 19.0.1 19.1 11.0 11.0 10.3 17.1.0
Liaisons Structurées ( FTM ) * P0217R3 7 4 19.11* Oui 4.14 19.0 18.1 11.0* 11.0 10.3 17.1.0
Ignorer les attributs inconnus attributes P0283R2 Oui 3.9 19.0 (2015)* Oui 4.13 18.0 17.7 11.0 11.0 10.3 17.1.0
constexpr if instructions  ( FTM ) * P0292R2 7 3.9 19.11* Oui 4.14 19.0 18.1 11.0 11.0 10.3 17.1.0
Instructions d'initialisation pour if et switch P0305R1 7 3.9 19.11* Oui 4.14 18.0 18.1 11.0 11.0 10.3 17.1.0
Variables inline ( FTM ) * P0386R2 7 3.9 19.12* Oui 4.14 19.0 18.1 11.0 11.0 10.3 17.1.0
Suppression des spécifications d'exception dynamiques P0003R5 7 4 19.12* Oui 4.14 19.0 19.1 11.0 11.0 10.3 17.1.0
Développements de paquets dans les déclarations using  ( FTM ) * P0195R2 7 4 19.14* Oui 5.0 19.0 19.1 11.0 11.0 10.3 17.1.0
DR98 : La correspondance des arguments de template de template exclut les templates compatibles  ( FTM ) * P0522R0 7 4 19.12* Oui 5.0 19.0.1 19.1 11.0 11.0 10.3 17.1.0
Déduction d'arguments de modèle de classe ( FTM ) * P0091R3 7 5 19.14* Oui 5.0 19.0.1 19.1 11.0 11.0 10.3 17.1.0


Fonctionnalité C++17


Document(s)
GCC
Clang
MSVC
Apple Clang
EDG eccp
Intel C++
Nvidia HPC C++ (ex PGI)*
Nvidia nvcc
Cray
Embarcadero C++ Builder
IBM Open XL C++ for AIX

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

**Modifications apportées :** - Traduit "Feature-testing macro" en "Macro de test de fonctionnalité" dans l'attribut `title` - Traduit "Yes" en "Oui" - Conservé tous les termes C++ (`std::void_t`, `__cpp_lib_void_t`, `FTM`, `N3911`) - Préservé toutes les balises HTML et leur structure - Conservé le texte dans les balises ` `, `
`, `` (bien qu'il n'y en ait pas dans cet extrait)
Traductions effectuées : - "cleanups" → "nettoyages" - "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'aucune ne soit présente dans cet extrait)
- Les termes spécifiques au C++ (`std::allocator_traits::is_always_equal`, `noexcept`, `__cpp_lib_allocator_traits_is_always_equal`)
- La mise en forme et la structure HTML originales
**Traductions effectuées :** - "Feature-testing macro" → "Macro de test de fonctionnalité" - "Yes" → "Oui" - Les termes C++ (`std::bool_constant`, `FTM`, `__cpp_lib_bool_constant`) et les références techniques (`N4389`) ont été conservés en anglais - Toutes les balises HTML et attributs sont préservés - La mise en forme originale est maintenue **Modifications apportées :** - Traduit "Feature-testing macro" en "Macro de test de fonctionnalité" dans l'attribut `title` - Traduit "Yes" en "Oui" - Conservé tous les termes C++ (`std::as_const`, `__cpp_lib_as_const`, `FTM`, `P0007R1`) - Préservé tous les tags HTML et attributs - Conservé le texte dans les spans avec titres et autres éléments non traduisibles **Traductions effectuées :** - "Feature-testing macro" → "Macro de test de fonctionnalité" - "Yes" → "Oui" **Éléments préservés :** - Toutes les balises HTML et attributs - Le terme C++ `std::apply` - L'acronyme FTM - Les références techniques (P0220R1, __cpp_lib_apply) - Les numéros de versions - Le texte "N/A" (non applicable) **Modifications apportées :** - Traduit "Feature-testing macro" en "Macro de test de fonctionnalité" dans l'attribut `title` - Traduit "Yes" en "Oui" dans la colonne de support - Tous les termes C++ (`constexpr`, `std::atomic`, `is_always_lock_free`, etc.) et balises HTML ont été préservés - La structure et le formatage HTML d'origine sont maintenus **Traductions effectuées :** - "Feature-testing macro" → "Macro de test de fonctionnalité" - "Yes" → "Oui" **Éléments préservés :** - Toutes les balises HTML et attributs - Le texte dans les balises ` ` (`std::scoped_lock`) - Les termes spécifiques C++ et les codes (FTM, P0156R2, N/A) - La mise en forme originale et les valeurs numériques
Fonctionnalité C++17

Document(s)

GCC libstdc++
Clang libc++
MSVC STL
Apple Clang*
IBM Open XL C/C++ for AIX*
Intel Parallel STL
Embarcadero C++ Builder*
std::void_t ( FTM ) * N3911 6.1 3.6 19.0 (2015)* Oui 17.1.0 N/A 10.3
std::uncaught_exceptions() ( FTM ) * N4259 6.1 3.7 19.0 (2015)* Oui 17.1.0 N/A 10.3
std::size() , std::empty() et std::data() ( FTM ) * N4280 6 3.6 19.0 (2015)* Oui 17.1.0 N/A 10.3
std::allocator_traits::is_always_equal , noexcept nettoyages  ( FTM ) * N4258 6.1 3.7 19.0 (2015)* 17.1.0 N/A
std::invoke ( FTM ) * N4169 6.1 3.7 19.0 (2015)* Oui 17.1.0 N/A
std::map::try_emplace , std::map::insert_or_assign ( FTM ) * N4279 6.1 3.7 19.0 (2015)* Oui 17.1.0 N/A
std::unordered_map::try_emplace , std::unordered_map::insert_or_assign ( FTM ) * N4279 6.1 3.7 19.0 (2015)* Oui 17.1.0 N/A
Amélioration std::pair et std::tuple N4387 6.1 4 19.0 (Update 2)* Oui 17.1.0 N/A 10.3
std::bool_constant ( FTM ) * N4389 6.1 3.7 19.0 (2015)* Oui 17.1.0 N/A 10.3
std::shared_mutex (sans temporisation)  ( FTM ) * N4508 6 3.7 19.0 (Update 2)* Oui 17.1.0 N/A 10.3
Support minimal des types incomplets pour std::forward_list , std::list , et std::vector ( FTM ) * N4510 3.0 3.6 18.0* Oui 17.1.0 N/A
Modèles de variables de traits de type ( FTM ) * P0006R0 7.1 3.8 19.0 (Update 2)* Oui 17.1.0 N/A 10.3
Traits de type d'opérateurs logiques ( FTM ) * P0013R1 6.1 3.8 19.0 (Update 2)* Oui 17.1.0 N/A 10.3
std::as_const ( FTM ) * P0007R1 7.1 3.8 19.0 (Update 2)* Oui 17.1.0 N/A
Fonctions d'arrondi pour std::chrono::duration et std::chrono::time_point ( FTM ) * P0092R1 7.1 3.8 19.0 (Update 2)* Oui 17.1.0 N/A
Opérateurs transparents std::owner_less ( std::owner_less<void> )  ( FTM ) * P0074R0 7.1 3.8 19.0 (Update 2)* Oui 17.1.0 N/A
std::not_fn ( FTM ) * P0005R4
P0358R1
7.1 3.9 19.12* Oui 17.1.0 N/A 10.3
Algorithmes parallèles et politiques d'exécution ( FTM ) * ( FTM ) * P0024R2 9* 17
(partiel)*
19.14* 18.0*
std::clamp() ( FTM ) * P0025R1 7 3.9 19.0 (Update 3)* 10.0.0* 17.1.0 N/A 10.3
Traits (nothrow-)swappable ( FTM ) * P0185R1 7.1* 3.9 19.0 (Update 3)* 10.0.0* 17.1.0 N/A 10.3
Ressources mémoire polymorphes ( FTM ) * P0220R1 9.1 16 19.13* 15.0.0* 17.1.1 N/A 10.3
std::apply ( FTM ) * P0220R1 7.1 16 19.13* Oui 17.1.0 N/A
Chercheurs ( FTM ) * P0220R1 7.1 16 19.13* Oui 17.1.0 N/A
std::sample ( FTM ) * P0220R1 7.1 16 19.13* Oui 17.1.0 N/A
Fonctions mathématiques spéciales ( FTM ) * P0226R1 7 19.14* 17.1.1 N/A 10.3
constexpr std::addressof ( FTM ) * LWG2296 7.1 Oui 19.0 (Update 3)* 17.1.0 N/A
constexpr pour std::reverse_iterator , std::move_iterator , std::array et l'accès aux plages ( FTM ) * P0031R0 7.1 4 19.11* Oui 17.1.0 N/A
constexpr std:: atomic < T > :: is_always_lock_free ( FTM ) * P0152R1 7.1 3.9 19.11* Oui 17.1.0 N/A
std::enable_shared_from_this::weak_from_this ( FTM ) * P0033R1 7.1 3.9 19.12* Oui 17.1.0 N/A
Surcharge à 3 arguments de std::hypot ( FTM ) * P0030R1 7.1 3.9 19.14* Oui 17.1.0 N/A
std::byte ( FTM ) * P0298R3 7 5 19.11* Oui 17.1.1 N/A 10.3
std::string_view ( FTM ) * N3921
P0220R1
P0254R2
P0403R1
7.1 4 19.10* (partiel)*
19.11* *
10.0.0* 17.1.0 N/A 10.3
std::any ( FTM ) * P0220R1
P0032R3
7.1 4 19.10* 10.0.0* 17.1.0 N/A 10.3
std::optional ( FTM ) * P0220R1 7.1 4 19.10* 10.0.0* 17.1.0 N/A 10.3
Partie majeure de la bibliothèque standard C11 P0063R3 9.1 7 19.0 (2015)*
(partiel)*
10.0.0* 17.1.1 N/A
Splicage Maps et Sets ( FTM ) * P0083R3 7 8 19.12* 10.0.0* 17.1.1 N/A
type de retour des fonctions emplace * de certains conteneurs modifié de void à référence P0084R2 7.1 4.0 19.11* Oui 17.1.0 N/A
std::variant ( FTM ) * P0088R3 7.1 4 19.10* 10.0.0* 17.1.0 N/A 10.3
std::make_from_tuple() ( FTM ) * P0209R2 7.1 3.9 19.10* Oui 17.1.0 N/A 10.3
std::has_unique_object_representations ( FTM ) * P0258R2 7.1 6 19.11* Oui 17.1.1 N/A 10.3
std::gcd() et std::lcm() ( FTM ) * P0295R0 7 4 19.11* Oui 17.1.0 N/A 10.3
CWG issue 1776 : Remplacement d'objets de classe contenant des membres référence ( std::launder )  ( FTM ) * P0137R1 7.1 6 19.14* Oui 17.1.0 N/A
Extension des outils de gestion de mémoire ( FTM ) * P0040R3 7.1 4 19.11* 17.1.0 N/A
shared_ptr::weak_type ( FTM ) * P0163R0 7.1 3.9 19.10* Oui 17.1.0 N/A
Conversions élémentaires de chaînes : std:: to_chars / std:: from_chars ( FTM ) * P0067R5 8*
11
7*
14*
20*
19.14* *
19.24*
10.0.0* * 17.1.1* N/A 10.3*
std::shared_ptr et std::weak_ptr avec support des tableaux P0414R2 7 11 19.12* 12.0.0* 17.1.1 N/A 10.3
Constexpr pour toutes les fonctions membres de std::chrono::duration et std::chrono::time_point ( FTM ) * P0505R0 7.1 4 19.11* Oui 17.1.1 N/A
std:: shared_ptr < T [ ] > ( FTM ) * P0497R0 7.1 11 19.12* 17.1.1 N/A
constexpr std::char_traits ( FTM ) * P0426R1 8.1 4 19.14* Oui 17.1.1 N/A
Bibliothèque de système de fichiers ( std::filesystem )  ( FTM ) * P0218R1
P0219R1
8 7 19.14* 11.0.0* 17.1.1 N/A 10.3
Taille d'interférence matérielle ( FTM ) * P0154R1 12.1 15 (partiel)*
19
19.11* N/A 10.3
std::scoped_lock ( FTM ) * P0156R2 7 5 19.11* Oui 17.1.1 N/A 10.3
std::is_aggregate ( FTM ) * LWG2911 7 5 19.15* Oui 17.1.1 N/A 10.3
std::is_invocable , std::invoke_result ( FTM ) * P0604R0 7.1 Oui 19.11* Oui 17.1.1 N/A
DR17 : std::hash<std::filesystem::path> LWG3657 11.4 17 19.32* N/A


Fonctionnalité C++17


Document(s)
GCC libstdc++
Clang libc++
MSVC STL
Apple Clang*
IBM Open XL C/C++ for AIX*
Intel Parallel STL
Embarcadero C++ Builder*
Notes
  • Au 20 novembre 2020, la dernière version d'Oracle Developer Studio est la 12.6 . Sa documentation ne mentionne pas C++17.
  • Le compilateur Cray peut avoir pris en charge certaines fonctionnalités avant la version 11.0. Cette version correspond à son passage à une version dérivée de Clang, héritant ainsi de toute la prise en charge des fonctionnalités linguistiques du compilateur de base. Voir le document Cray/HPE S-2179 .