GCC 4.9.0 est disponible et dispose d'un meilleur support de C++11 et C++14
GCC 4.9.0 est disponible et dispose d'un meilleur support de C++11 et C++14
La nouvelle version de GCC arrive et nous propose de nombreuses améliorations liées au support du C++11 et du C++14. Un des ajouts les plus importants est le support des expressions régulières à travers std::regex.
De plus, l'implémentation de la déduction du type de retour a été mise à jour pour correspondre à la norme N3638. Plus précisément, cela permet d'utiliser decltype(auto) à la place du auto seul :
Code:
1 2 3
| int& f();
auto i1 = f(); // int
decltype(auto) i2 = f(); // int& |
G++ supporte maintenant la capture des listes d'initialisations dans les lambda :
Le support des tableaux à taille variable définis dans le C++1y. Ce support existait depuis de nombreuses années à travers la norme GNU/C99, mais maintenant, ces tableaux supportent aussi les listes d'initialisations et la capture par référence par une expression lambda. Avec le mode C++1y, G++ indiquera une erreur pour les usages interdits par le standard, notamment la création d'un pointeur ou l'application de sizeof() sur de tels tableaux.
Toutefois, il faut savoir que les tableaux à taille variable n'apparaîtront peut être pas dans C++14, mais seront intégrés dans un document à part et peut être dans C++17.
Code:
1 2 3 4 5
| void f(int n) {
int a[n] = { 1, 2, 3 }; // envoie std::bad_array_length si n < 3
[&a]{ for (int i : a) { cout << i << endl; } }();
&a; // erreur, accès à l'adresse d'un tableau à taille variable
} |
G++ supporte l'attribut [[deprecated]] (module les bogues de [[gnu::deprecated]]. Les classes et les fonctions peuvent ainsi être marquées dépréciées et faire apparaître un message additionnel :
Code:
1 2 3 4 5 6 7 8 9 10 11 12
| class A;
int bar(int n);
#if __cplusplus > 201103
class [[deprecated("A is deprecated in C++14; Use B instead")]] A;
[[deprecated("bar is unsafe; use foo() instead")]]
int bar(int n);
int foo(int n);
class B;
#endif
A aa; // warning: 'A' is deprecated : A is deprecated in C++14; Use B instead
int j = bar(2); // warning: 'int bar(int)' is deprecated : bar is unsafe; use foo() instead |
Le support d'un séparateur entre les chiffres a été ajouté. Les nombres peuvent ainsi être plus lisibles :
Code:
1 2 3 4 5
| int i = 1048576;
int j = 1'048'576;
int k =0x10'0000;
int m = 0'004'000'000;
int n = 0b0001'0000'0000'0000'0000'0000; |
Code:
1 2
| double x = 1.602'176'565e-19;
double y = 1.602'176'565e-1'9; |
G++ supporte les lambdas polymorphiques :
Code:
1 2
| // un objet fonctionnel qui incrémente n'importe quel type
auto incr = [](auto x) { return x++; }; |
Finalement, de nombreuses améliorations ont été effectuées pour supporter le nouveau standard C++14 :
- correction des fonctions membres constexpr sans const ;
- implémentation de la fonction std::exchange() ;
- adressage des tuples par le type ;
- implémentation de std::make_unique ;
- implémentation de std::shared_lock ;
- std::result_of respecte SFINAE ;
- ajout de l'opérateur () à integral_constant ;
- ajout d'expressions définies par l'utilisateur pour les types de la bibliothèque standard std::basic_string, std::chrono::duration et std::complex ;
- ajout de manipulateurs E/S pour les chaînes de caractères entre guillemets ;
- ajout de membres constexpr à <utility>, <complex>, <chrono> et quelques conteneurs ;
- ajout de std::integer_sequence traité au moment de la compilation ;
- ajout de traits de transformation plus propres ;
- modification des foncteurs de <functional> plus faciles à utiliser et plus génériques.
G++ embarque maintenant une implémentation de std::experimental::optional et std::experimental::string_view.
La fonction std::copy_exception est maintenant dépréciée et sera supprimée dans la prochaine version. Vous devez utiliser std::make_exception_ptr à la place.
Votre opinion
:fleche: Utilisez-vous GCC ? Pourquoi le préférez-vous aux autres compilateurs ?
Source
Modifications de la version 4.9
GCC 4.9.1 arrive et ajoute le support d'OpenMP 4 pour le Fortran
GCC 4.9.1 arrive et ajoute le support d'OpenMP 4 pour le Fortran
La nouvelle version de la branche 4.9 de GCC arrive et nous propose l'intégration de OpenMP 4, pour les compilateurs C, C++ et Fortran.
L'option -fopenmp-simd permet d'utiliser les directives SIMD de OpenMP en place des autres directives. L'option -fsimd-cost-model= permet quant à elle de choisir le modèle du coût de la vectorisation pour les boucles annotées avec les directives SIMD. Finalement -Wopenmp-simd avertit lorsque le modèle de coût surcharge les directives SIMD définies par l'utilisateur.
Sinon, cette mise à jour étant une mise à jour mineure, elle est accompagnée de son lot de corrections de bogues et de minimes améliorations.
:fleche: Télécharger GCC
:fleche: Consulter les notes de version