Подтвердить что ты не робот

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

В настоящее время с g++ - 4.8.1 вам нужно скомпилировать файл в режиме С++ 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);
  • и т.д.
4b9b3361

Ответ 2

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

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

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

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

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

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

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

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

Ответ 3

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

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


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

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

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

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


Ответ 4

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

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

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

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

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

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