- GCC 15 ajoute un grand nombre de fonctionnalités C++26 et améliore aussi certaines fonctionnalités C++23
- Les principaux ajouts incluent Pack Indexing, Variadic Friends, l’indication du motif de suppression, les conditions avec structured bindings, etc.
- De nouvelles options du compilateur et de nouveaux avertissements ont également été introduits, améliorant l’expérience développeur
- La prise en charge des modules C++ a été renforcée, et la vitesse de compilation des templates a été optimisée
- GCC 15 a été adopté comme compilateur par défaut de Fedora 42 et devrait bientôt être proposé dans le Red Hat GCC Toolset
Les nouvelles fonctionnalités C++ de GCC 15
- GCC 15.1 est sorti le 25 avril 2025 et introduit sérieusement les fonctionnalités de C++26
- Le standard par défaut reste
gnu++17, et il est possible d’activer les fonctionnalités récentes avec -std=c++23, -std=c++26, etc.
- Les fonctionnalités C++20, C++23 et C++26 restent encore expérimentales (experimental)
Principales fonctionnalités de C++26
-
Pack Indexing
- Il devient possible d’accéder directement à un élément précis dans des arguments de Variadic Template avec la syntaxe
pack...[N]
- Cela permet de référencer proprement, par exemple, le premier argument sans astuces de répétition
-
Attribution d’attributs aux Structured Bindings
- Il devient possible d’appliquer séparément
[[attribute]] à chacune des variables issues d’un structured binding
- Par exemple, on peut marquer uniquement une variable liée spécifique avec
[[deprecated]]
-
Ajout d’une explication aux fonctions supprimées
- La syntaxe
= delete("raison") permet de fournir un message dans l’erreur d’appel d’une fonction supprimée
-
Variadic Friends
- Dans une classe template, il devient possible de déclarer plusieurs types comme
friend en une seule fois
- C’est utile pour renforcer le contrôle d’accès, comme avec le pattern Passkey
-
constexpr Placement New
std::allocator et placement new peuvent être utilisés dans un contexte constexpr
-
Utilisation des structured bindings dans les conditions
- Il devient possible de déclarer des structured bindings dans les conditions de
if, while et switch
- L’évaluation de la condition est effectuée par une variable interne générée par le compilateur
-
Interdiction de supprimer des types incomplets
- Si
delete ou delete[] est utilisé sur un type incomplet, une erreur de compilation est générée en mode C++26
-
Avertissement sur la virgule d’Oxford
- En C++26, le compilateur émet un avertissement pour les déclarations de fonctions variadiques qui utilisent uniquement
... sans , ...
-
Suppression de la comparaison de tableaux
- Le code qui compare des tableaux avec
== est traité comme une erreur
- Dans C++20, ce n’était qu’un avertissement, mais cela devient désormais une erreur de compilation en mode C++26
-
Directive #embed
- Prise en charge de
#embed, qui permet d’insérer directement des données binaires dans le code source
Aucun commentaire pour le moment.