Statut de conformité des fonctionnalités du langage C++ moderne

De RAD Studio

Remonter à C++ moderne


Voici ci-dessous la liste des fonctionnalités du C++ moderne qui sont prises en charge par les compilateurs C++ de RAD Studio.

Fonctionnalités C++2c

Remarque: C++2c devrait correspondre à C++26.
Remarque: BCC64X est actuellement en version préliminaire (Preview). Les informations ci-dessous correspondent à un objectif non testé et ne garantissent pas la prise en charge dans la version finale. BCC64X utilise C++17 comme niveau de langage par défaut, et la version initiale n'est pas censée prendre en charge des langages de niveau supérieur. Pour compiler en C++2c, exécutez bcc64x avec -std=c++2c.
Fonctionnalité Document de proposition C++ 2c BCC32C/X BCC64 BCC64X
Supprimer le comportement non défini lors de l’analyse lexicale P2621R2
Rendre les littéraux de chaîne non encodables mal formés P1854R4
Chaînes non évaluées P2361R6
Ajouter @, $, et ` à l'ensemble de caractères de base P2558R2
Transtyper constexpr à partir de void* P2738R1
Ignorabilité des attributs standard P2552R3
Stockage statique pour les initialisateurs entre accolades P2752R3
Messages static_assert générés par l'utilisateur P2741R3
Variables de remplacement sans nom P2169R4


Fonctionnalités C++23

Remarque: C+23 est partiellement pris en charge par la version de Clang sur laquelle BCC64X est basé, ainsi que par les bibliothèques C+ RTL et STL (libc+) qu'il utilise. Toutes les fonctionnalités de langage prises en charge par Clang et par libc+ dans les versions 15 et antérieures devraient être prises en charge et fonctionner correctement. Mais, il convient de nuancer cela par les restrictions propres à une version préliminaire (Preview). En effet, aucune prise en charge officielle n'est garantie. Le compilateur BCC64X visant actuellement C+17 comme standard de langage, vous pouvez utiliser -std=c++23 pour modifier le niveau de conformité du langage cible.

Fonctionnalités C++20

Remarque: C+20 est partiellement pris en charge par la version de Clang sur laquelle BCC64X est basé, ainsi que par les bibliothèques C+ RTL et STL (libc+) qu'il utilise. Toutes les fonctionnalités de langage prises en charge par Clang et par libc+ dans les versions 15 et antérieures devraient être prises en charge et fonctionner correctement. Mais, il convient de nuancer cela par les restrictions propres à une version préliminaire (Preview). En effet, aucune prise en charge officielle n'est garantie. Le compilateur BCC64X visant actuellement C+17 comme standard de langage, vous pouvez utiliser -std=c++20 pour modifier le niveau de conformité du langage cible.

Fonctionnalités C++17

Remarque: BCC64X est une version préliminaire (Preview). Les informations ci-dessous correspondent à un objectif non testé et ne garantissent pas la prise en charge dans la version finale.
Fonctionnalité Document de proposition C++17 BCC32C/X BCC64 BCC64X
Nouvelles règles relatives à auto pour direct-list-initialization N3922
static_assert sans message N3928
typename dans un paramètre template template N4051
Suppression des trigraphes N4086
Définition d'espaces de nommage imbriqués N4230
Attributs pour espaces de nommages et énumérateurs N4266
Littéraux caractères u8 N4267
Autoriser l'évaluation de constante pour tous les arguments template sans type N4268
Expressions fold N4295
Suppression du mot clé register devenu obsolète P0001R1
Suppression de l'opérateur ++(bool) obsolète P0002R1
Suppression de spécifications d'exceptions obsolètes dans C++17 P0003R5
Inclure les spécifications d'exception dans le système de type P0012R1
Initialisation des agrégats de classes avec les classes de base P0017R1
Capture lambda de *this P0018R3
Utilisation des espaces de nommage des attributs sans répétition P0028R4
Allocation mémoire dynamique pour des données sur-alignées P0035R4
Expressions fold unaires et packs de paramètres vides P0036R0
__has_include dans les conditions du préprocesseur P0061R1
Déduction d'arguments de template pour les templates de classes P0091R3
Paramètres de template sans type avec le type auto P0127R2
Elision de copie garantie P0135R1
Nouvelle spécification pour l'héritage des constructeurs (DR1941 et al) P0136R1
Remplacement des objets de classe contenant des membres de référence P0137R1
Direct-list-initialization des énumérations P0138R2
Ordre d'évaluation des expressions plus strict P0145R3
Expressions lambda constexpr P0170R1
Types begin et end différents dans les boucles for basées sur un intervalle P0184R0
Attribut [[fallthrough]] P0188R1
Attribut [[nodiscard]] P0189R1
Extensions de packs dans les déclarations using P0195R2
Attribut [[maybe_unused]] P0212R1
Liaisons structurées P0217R3
Littéraux hexadécimaux à virgule flottante P0245R1
Ignorer les attributs inconnus P0283R2
Instructions if constexpr P0292R2
Instructions init pour if et switch P0305R1
Variables inline P0386R2
DR : La mise en correspondance d'arguments template template exclut les templates compatibles P0522R0
std::uncaught_exceptions() N4259
Amélioration de std::pair et std::tuple N4387
std::any P0220R1
std::variant P0088R3
std::optional P0220R1
std::shared_mutex (untimed) N4508
std::string_view N3921
Standardisation du parallélisme TS P0024R2
Conversions de chaînes élémentaires P0067R5
Fonctions mathématiques spéciales P0226R1
Transferts d'ensembles et de cartes P0083R3
Taille d'interférence matérielle P0154R1
std::filesystem P0218R1
std::byte P0298R3

Fonctionnalités C++14

Fonctionnalité Document de proposition C++14 BCC32C/X BCC64
Formulation ajustée pour les conversions textuelles N3323
Littéraux binaires N3472
decltype(auto), déduction du type de retour pour les fonctions normales N3638
Captures lamba initilisées/généralisées (init-capture) N3648
Expressions lambda (polymorphiques) génériques N3649
Templates de variables N3651
Constexpr étendu N3652
Initialiseurs de membres et agrégats (NSDMI) N3653
Clarification de l'allocation mémoire (en évitant/fusionnant les allocations) N3664
Attribut [[deprecated]] N3760
Désallocation dimensionnée N3768
Guillemet simple utilisé comme séparateur numérique N3781
std::result_of et SFINAE N3462
constexpr pour <complex> N3302
constexpr pour <chrono> N3469
constexpr pour <array> N3470
constexpr pour <initializer_list>, <utility> et <tuple> N3471
Amélioration de std::integral_constant N3545
Littéraux définis par l'utilisateur pour <chrono> et <string> N3642
Itérateurs forward null N3644
std::quoted N3654
Recherche associative hétérogène N3657
std::integer_sequence N3658
std::shared_timed_mutex N3659
std::exchange N3668
Résolution des fonctions membre constexpr sans const N3669
std::get<T>() N3670
std::equal, std::is_permutation, std::mismatch à double plage N3671

Fonctionnalités C++11

Fonctionnalité Document de
proposition C++11
BCC32C/X BCC32 BCC64
Références rvalue N2118
    Références rvalue pour *this N2439
Initialisation des objets de classe par rvalues N1610
Initialiseurs de membres de données non statiques N2756
Templates variadic N2242
    Extension des paramètres template de modèle variadic N2555
Liste d'initialiseurs N2672
Assertions statiques N1720
Variables auto-typées N1984
    Multi-déclarateur auto N1737
    Suppression de auto comme spécificateur de classe de stockage N2546
    Nouvelle syntaxe de déclarateur de fonction N2541
Expressions lambda N2927
Type déclaré d'une expression N2343
    Types de retour incomplets N3276
Crochets droits N1757
Arguments de template par défaut pour les templates de fonctions DR226
Résolution du problème SFINAE pour les expressions DR339
Templates d'alias N2258
Templates extern N1987
Constante pointeur null N2431
Enumérations fortement typées N2347
Déclaration forward des énumérations N2764
DR1206
Syntaxe des attributs standardisés N2761
Expressions constantes généralisées N2235
Support de l'alignement N2341
Comportement support conditionnel N1627
Changement du comportement non défini en erreurs diagnosticables N1727
Délégation de constructeurs N1986
Constructeurs d'héritage N2540
Opérateurs de conversion explicite N2437
Nouveaux types de caractères N2249
Littéraux chaîne Unicode N2442
Littéraux chaîne brute N2442
Noms de caractères universels dans les littéraux N2170
Littéraux définis par l'utilisateur N2765
Types de disposition standard N2342
Fonctions par défaut N2346
Fonctions supprimées N2346
Déclarations friend étendues N1791
Extension de sizeof N2253
DR850
Espaces de nommage inline N2535
Unions non restreintes N2544
Types locaux et non nommés comme arguments de template N2657
Boucle for basée sur l'étendue N2930
Redéfinitions explicites de virtual N2928
N3206
N3272
Support minimal du nettoyage de la mémoire et de la détection de perte basée sur l'accessibilité N2670
Autoriser les constructeurs de déplacement à déclencher une exception [noexcept] N3050
Définition de fonctions membre spéciales de déplacement N3053
Accès concurrent
Points de séquence N2239
Opérations atomiques N2427
Opération comparer-échanger forte N2748
Délimitations bidirectionnelles N2752
Modèle de mémoire N2429
Ordre dépendant des données : opérations atomiques et modèle de mémoire N2664
Propagation des exceptions N2179
Autoriser l'usage des opérations atomiques dans les gestionnaires de signaux N2547
Stockage local des threads N2659
Initialisation dynamique et destruction avec accès concurrent N2660
Fonctionnalités C99 dans C++11
Identificateur prédéfini __func__ N2340
Préprocesseur C99 N1653
Type long long N1811
Types intégraux étendus N1988

Voir aussi