Когда Gnu C ++ будет поддерживать C ++ 11 без явного запроса?

В настоящее время с g ++ — 4.8.1 вы должны скомпилировать файл в режиме C ++ 11 через

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

Есть ли план, когда я просто могу сказать

g++ -o prog.x prog.cpp

Скомпилировать prog.cpp?

Может быть prog.cpp имеет

  • #include <regex>
  • thread_local
  • class Widget { int member = 5; }
  • MyType operator"" myt(const char*, sze_t);
  • и так далее.

45

Решение

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

Режим по умолчанию для C ++ теперь -std=gnu++14 вместо -std=gnu++98,

27

Другие решения

Я думаю, что наиболее близким к ответу, который я могу получить, является info gcc команда:

Пересмотренный стандарт ISO C ++ был опубликован в 2011 году как ISO / IEC
14882: 2011 и упоминается как C ++ 11; до его публикации это было
обычно упоминается как C ++ 0x. C ++ 11 содержит несколько изменений в
Язык С ++, большинство из которых были реализованы в экспериментальной
Режим C ++ 11 в GCC. Для получения информации о возможностях C ++ 11
доступно в экспериментальном режиме C ++ 11, см.
http://gcc.gnu.org/projects/cxx0x.html. Чтобы выбрать этот стандарт в
GCC, используйте опцию ‘-std = c ++ 11’; получить всю диагностику
в соответствии со стандартом, вы также должны указать ‘-pedantic’ (или
‘-pedantic-errors’, если вы хотите, чтобы они были ошибками, а не
предупреждения).

http://gcc.gnu.org/projects/cxx0x.html Страница говорит:

Важно: поддержка GCC для C ++ 11 все еще является экспериментальной. Немного
функции были реализованы на основе ранних предложений, и никаких попыток
будет сделано для обеспечения обратной совместимости при их обновлении
соответствовать окончательному стандарту C ++ 11.

libstdc ++ Страница также показывает, что она неполная. (Я даже не думаю, regex еще реализовано.)

Ответ Стива Джессопа в основном говорит то же самое в последнем абзаце, но процитирую первую часть своего ответа:

C ++ 11 был стандартом в течение нескольких лет, но компилятор не
собираюсь переключить режим по умолчанию на C ++ 11 до тех пор, пока:

  • Как минимум, поддержка C ++ 11 в этом компиляторе и библиотеках, которые он использует, завершена. А также стабильный, если компилятор
    писатель имеет какое-либо беспокойство по поводу надежности.
  • Желательно, чтобы основной номер версии увеличивался в компиляторе, поскольку C ++ 11 не полностью обратно совместим с C ++ 03.
  • В идеале, по хорошо известному графику, чтобы пользователи могли подготовиться к изменениям.
19

ОБНОВИТЬ: Первоначальный ответ устарел за последние 28 месяцев. В соответствии с ответ Нобара, GCC 6.1 по умолчанию поддерживает C ++ 14 с расширениями GNU. GCC 6.1 был выпущен 27 апреля 2016 года. Я очень удивлен, но очень рад видеть такое быстрое принятие нового стандарта!

Что касается остальной части исходного ответа, я все еще вижу ценность в сохранении той части, которая отвечает, как сделать определенные флаги «по умолчанию». Поэтому я сохранил это ниже.


Есть ли план, когда я просто могу сказать […]

Вы можете определить флаги по умолчанию в Makefile, а затем все, что вам нужно сказать, это make,

Принятый ответ на Как включить C ++ 11 в gcc? следует начать (или некоторые учебник по makefile).

Еще один совет, который часто появляется здесь, в Stackoverflow, — добавить псевдоним bash. alias g++="g++ --std=c++0x", увидеть Вот как. Однако лично я бы не стал этого делать, это может привести к неприятным сюрпризам; с C ++ 11 произошли серьезные изменения. Я хотел бы создать свой собственный make-файл и просто набрать make,


13

Похоже, что в GCC 5.0 по умолчанию будет gnu11 (диалект c ++ 11 AFAIK) с улучшениями в c ++ 11, которые будут использоваться в изменениях. Увидеть https://gcc.gnu.org/gcc-5/changes.html . Кажется, он также будет иметь некоторую поддержку C ++ 14.

Одно из наиболее интересных утверждений относительно сценария bugzilla, которое разделяет @ marc-glisse, похоже, не обсуждается, см. https://gcc.gnu.org/gcc-5/criteria.html для деталей: —

Все открытые в Bugzilla регрессии были проанализированы, и все они
считается маловероятным, чтобы повлиять на большинство пользователей, или намерены
оказать минимальное влияние на пострадавших пользователей. Например, типографский
ошибка в диагностике может быть относительно распространенной, но также имеет минимальную
влияние на пользователей.

В общем, регрессии, когда компилятор генерирует неправильный код,
или отказывается составить действительную программу, будет считаться
достаточно серьезный, чтобы заблокировать выпуск, если нет существенных
смягчающие факторы. — Страница критериев выпуска GCC

Сроки действительно дают некоторое представление о том, когда и если это произойдет https://gcc.gnu.org/develop.html#timeline

Поэтому, надеюсь, мы увидим новый gcc с поддержкой c ++ 11 по умолчанию к 2015 году. Когда дистрибутивы GNU / Linux возьмутся за работу и сделают все, что им нужно, для программ, создаваемых с c ++ 11, это еще один вопрос.

-3
По вопросам рекламы [email protected]