Почему Clang решил разрешить назначенные инициализаторы в C++?

Я думал, что указанные инициализаторы были прекращены в C++ и работали только в C. Однако я натолкнулся на простой пример, который компилировался и прекрасно работал с clang ++.

int main()
{
    int a[6] = { [4] = 29, [2] = 15 };
}

g ++: https://rextester.com/AXIZ79197 (ошибка)

clang ++: https://rextester.com/UYVHHP56966 (работает)

vC++: https://rextester.com/UCBEU10658 (ошибка)

И g ++, и vC++ не удалось скомпилировать, тогда как clang ++ работал просто отлично. Также стоит упомянуть, что g ++ и vC++ выдавали разные сообщения об ошибках. vC++ перепутал обозначенные инициализаторы с лямбда-выражениями. Я думаю, я мог бы обвинить в этом тот факт, что g ++ является более старым компилятором, но я не уверен, что это так.

Вопросы:

  1. Почему clang решил разрешить назначенные инициализаторы, а g ++ и vC++ этого не сделали?
  2. Это просто ошибка компилятора или есть другая причина для этого?

1 ответ

Решение

Когда скомпилировано с -pedantic эти предупреждения генерируются:

source_file.cpp:3:18: warning: designated initializers are a C99 feature [-Wc99-extensions]
    int a[6] = { [4] = 29, [2] = 15 };
                 ^~~~~~~~
source_file.cpp:3:28: warning: designated initializers are a C99 feature [-Wc99-extensions]
    int a[6] = { [4] = 29, [2] = 15 };

Ясно, что clang++ по умолчанию включает c99-extensions,

Это не ошибка, так как компиляторы могут предоставить дополнительную функцию. clang++ разработчики просто решили оставить его включенным. Лучше использовать -pedantic если мы не хотим эти функции.

Интересно, что при поиске соответствующей информации я наткнулся на страницу поддержки C++ в Clang, где "Назначенные инициализаторы" перечислены как частично поддерживаемые через расширение для будущих предложений:

экспериментальная поддержка некоторых предложенных функций стандарта C++ после C++17, условно названного C++2a

Это точное предложение для предстоящего стандарта. Так что в будущем C++ могут быть назначены инициализаторы.

Другие вопросы по тегам