Statut de conformité des fonctionnalités du langage C++ moderne
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 | |||||