Возможно, я не с этой планеты, но мне кажется, что следующая синтаксическая ошибка:
int a[] = {1,2,}; //extra comma in the end
Но это не так. Я был удивлен, когда этот код был скомпилирован в Visual Studio, но я научился не доверять компилятору MSVC в отношении правил С++, поэтому я проверил стандарт и допустил стандарт. Вы можете видеть 8.5.1 для правил грамматики, если вы мне не верите.
Почему это разрешено? Это может быть глупый бесполезный вопрос, но я хочу, чтобы вы поняли, почему я спрашиваю. Если бы это был подзаголовок общего правила грамматики, я бы понял - они решили не затруднять общую грамматику, чтобы просто запретить избыточную запятую в конце списка инициализаторов. Но нет, добавлена дополнительная запятая явно. Например, не разрешается иметь избыточную запятую в конце списка аргументов функции-вызова (когда функция принимает ...
), что является нормальным.
Итак, опять-таки, есть ли какая-то особая причина в том, что эта избыточная запятая явно разрешена?