web-dev-qa-db-fra.com

Quand Gnu C ++ prendra-t-il en charge C ++ 11 sans le demander explicitement?

Actuellement, avec g ++ - 4.8.1, vous devez compiler un fichier en mode C++ 11 via

g++ -std=c++11 -o prog.x prog.cpp

Y a-t-il un plan quand je peux juste dire

g++ -o prog.x prog.cpp

compiler prog.cpp?

Peut-être que prog.cpp A

  • #include <regex>
  • thread_local
  • class Widget { int member = 5; }
  • MyType operator"" myt(const char*, sze_t);
  • etc.
46
towi

GCC 6.0: https://gcc.gnu.org/gcc-6/changes.html

Le mode par défaut pour C++ est maintenant -std=gnu++14 au lieu de -std=gnu++98.

29
nobar

Je pense que la réponse la plus proche que je peux obtenir est celle du info gcc commande:

Une norme ISO C++ révisée a été publiée en 2011 sous le nom ISO/IEC 14882: 2011 et est appelée C++ 11; avant sa publication, il était communément appelé C++ 0x. C++ 11 contient plusieurs modifications au langage C++, dont la plupart ont été implémentées dans un mode expérimental C++ 11 dans GCC. Pour plus d'informations sur les fonctionnalités C++ 11 disponibles en mode expérimental C++ 11, voir http://gcc.gnu.org/projects/cxx0x.html . Pour sélectionner cette norme dans GCC, utilisez l'option '-std = c ++ 11'; pour obtenir tous les diagnostics requis par la norme, vous devez également spécifier '-pedantic' (ou '-pedantic-errors' si vous voulez que ce soient des erreurs plutôt que des avertissements).

La page http://gcc.gnu.org/projects/cxx0x.html dit:

Important: le support de GCC pour C++ 11 est encore expérimental. Certaines fonctionnalités ont été implémentées sur la base de premières propositions, et aucune tentative ne sera faite pour maintenir la compatibilité descendante lorsqu'elles seront mises à jour pour correspondre à la norme C++ 11 finale.

La page libstdc ++ montre également qu'elle est incomplète. (Je ne pense même pas que regex soit encore implémenté.)

réponse de Steve Jessop dit essentiellement la même chose dans le dernier paragraphe, mais pour citer la première partie de sa réponse:

C++ 11 est standard depuis quelques années, mais un compilateur ne changera pas son mode par défaut en C++ 11 tant que:

  • Au minimum absolu, la prise en charge de C++ 11 est complète dans ce compilateur et les bibliothèques qu'il utilise. Et également stable, si l'auteur du compilateur a le moindre souci de fiabilité.
  • De préférence, un numéro de version majeur augmente dans le compilateur, car C++ 11 n'est pas entièrement rétrocompatible avec C++ 03.
  • Idéalement, selon un calendrier bien connu afin que les utilisateurs puissent se préparer au changement.
20
user1508519

MISE À JOUR: La réponse originale est devenue obsolète au cours des 28 derniers mois. Selon réponse de nobar , GCC 6.1 prend en charge C++ 14 avec les extensions GNU par défaut. GCC 6.1 est sorti le 27 avril 2016. Je suis assez surpris mais très heureux de voir une adoption aussi rapide de la nouvelle norme!

En ce qui concerne le reste de la réponse d'origine, je vois toujours la valeur de conserver cette partie qui répond à la façon de rendre certains indicateurs "par défaut". Je l'ai donc gardé en dessous.


Y a-t-il un plan quand je peux juste dire [...]

Vous pouvez définir des indicateurs par défaut dans un Makefile, puis tout ce que vous avez à dire est make.

La réponse acceptée à Comment activer C++ 11 dans gcc? devrait vous aider à démarrer (ou un peu tutoriel makefile ).

Un autre conseil qui semble apparaître souvent ici sur Stackoverflow est d'ajouter un alias bash alias g++="g++ --std=c++0x", voir ici comment. Cependant, personnellement, je ne le ferais pas, cela peut conduire à de mauvaises surprises; il y a eu des changements de rupture avec C++ 11. Je voudrais créer mon propre makefile et taper simplement make.


13
Ali