Я замечаю, что ему не разрешено создавать массивы, не содержащие кучи нулевой длины.
// error: cannot allocate an array of constant length zero
char a[0];
Я также заметил, что он разрешил создавать массивы, выделенные кучей нулевой длины.
// this is okay though
char *pa = new char[0];
Я думаю, они оба гарантированы Стандартом (у меня нет копии Стандарта под рукой). Если да, то почему они такие разные? Почему бы просто не разрешить массив нулевой длины в стеке (или наоборот)?