Почему "-std = С++ 0x" все еще необходим для g++ 4.6.2?

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

    $ g++ --version
    g++ (GCC) 4.6.2
    Copyright (C) 2011 Free Software Foundation, Inc.
    This is free software; see the source for copying conditions.  There is NO
    warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

Ответ 1

Потому что

  • С++ 11 всего 4 месяца, и поддержка для него далека от завершения или тестирования.
  • изменение значения по умолчанию без большого объявления и фазы подготовки для людей не приятно
  • Неясно, изменится ли значение по умолчанию (см. -std = C99).

Ответ 2

Чтение веб-сайта GCC:

Статус экспериментальной поддержки С++ 0x в GCC 4.6

Таким образом, вы не можете сделать что-то экспериментальное. Более того, это было до стандартного выпуска С++ 11, и фактическое имя не было определено, что объясняет, почему С++ 0x, а не С++ 11.

Если вас интересует GCC 4.7, он все еще экспериментальный:

Статус экспериментальной поддержки С++ 11 в GCC 4.7

Ответ 3

Он по-прежнему необходим и, вероятно, останется таким в обозримом будущем, потому что С++ 11 имеет несовместимости с С++ 03. Изменение g++ для компиляции С++ 11 по умолчанию приведет к разрыву большого количества существующего кода.

Ответ 4

Я думаю, что тот факт, что он называется 0x, дает вам подсказку. Он даже не завершен (см. http://gcc.gnu.org/projects/cxx0x.html)