С научной точки зрения - все правильно.
Вопросы - в реализации.
Статический массив нулевой длины должен иметь какой-то адрес.
Проверка индексов, на мой взгляд, очевидно, для такого массива должна быть при компиляции.

Динамический массив - тоже должен иметь какой-то адрес.
И замечу, что все динамические массивы нулевой длины должны иметь РАЗНЫЕ адреса.
Проверка индекса такого для массива возможна ТОЛЬКО во время компиляции.

Недавно в одной лабе на С++ пацан сделал массив нулевой длины.
С++ это теоретически разрешает.
В лабе требовалось добавлять по 1 элементу в массив.
Вот он создает массив нулевой длины, передает его в качестве параметра в функцию.
Функция делает новый массив размером +1, переписывает туда переданный массив и последним размещает новый элемент.
Адрес нового массива возвращается из функции.
Прога не работала. Я смотрел адреса.
С++ нулевым массивам присваивал адреса, которые вызывают access violation.
Посоветовал пацану не выпендриваться, прочитать стандарт - может быть, там undifined behavior возникает?
Но пацану было читать лень, он просто стал создавать массив ненулевой длины...