Имея в виду следующий код:
int main()
{
int n = 3;
int arr[n] = { 1, 2, 3 };
}
GCC правильно выдает ошибки в режиме C99 error: variable-sized object may not be initialized
и clang выдает ту же ошибку в режиме C ++. Однако в режиме C ++ GCC не жалуется. Это заставило бы меня поверить, что это возможно расширение, которое не задокументировано на их C расширения VLA страницы. Я также не смог найти соответствующий отчет об ошибке. Кто-нибудь может проверить, является ли это расширением или существует существующий отчет об ошибке?
Это новое поведение на самом деле упоминается в как я подозреваю, может быть связано с Замечания к выпуску GCC 4.9:
G ++ поддерживает C ++ 1y массивы переменной длины. G ++ поддержал
VLA в стиле GNU / C99 долгое время, но теперь дополнительно поддерживает
инициализаторы и лямбда-захват по ссылке. В режиме C ++ 1y G ++ будет
жаловаться на использование VLA, которое не разрешено проектом стандарта,
такие как формирование указателя на тип VLA или применение sizeof к VLA
переменная. Обратите внимание, что теперь кажется, что VLA не будет частью
C ++ 14, но будет частью отдельного документа, а затем, возможно, C ++ 17.
Обратите внимание, что стандартный режим по умолчанию для C ++ по-прежнему gnu++98/gnu++03
для этого выпуска.