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

Почему поддержка компилятора С++ 11 по-прежнему требует наличия флага?

Я понимаю, что экспериментальные функции языка программирования не должны включаться по умолчанию, поэтому я приветствую флаги -std=c++0x и -std=c++1y. Однако С++ 11 теперь стандартен с тех пор как пару лет. Почему компиляторам по-прежнему требуется -std=c++11, чтобы включить поддержку своих функций?

4b9b3361

Ответ 1

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

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

В принципе, многие люди (и make файлы) полагаются на компилятор, являющийся совместимым компилятором С++ 03, или, по крайней мере, на его несоответствие, известное. Поскольку С++ 11 вводит новые экземпляры несоответствия С++ 03, это изменение потенциально травматично.

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

Для gcc, в частности, на странице руководства 4.8.2 говорится, что "поддержка С++ 11 все еще экспериментальна". Поэтому я думаю, что в конечном итоге ответ на ваш вопрос может заключаться в том, что для правильного внедрения С++ 11 требуется более двух лет, даже начиная со всей работы, выполненной с помощью проектов стандартов.

Ответ 2

Небольшое обновление. GCC 6.1 и выше используют режим С++ 14 по умолчанию [источник].