5.3.4 в стандарте C++:
6 Каждого постоянного выражения в прямого нового описателя- должен быть интегральным выражение постоянная (5.19) и оценку к строго положительному значению. выражения в прямого нового-описателе имеет интегральный или перечисления типа (3.9.1) с неотрицательным значением ...
7 Когда значение выражения в прямого -new-declarator равен нулю, функция выделения вызывается для выделения массива без элементов.
Итак, ваш код выделяет массив, который ведет себя во всех отношениях, как и любой другой массив из T (может быть удален с помощью delete [], передан как параметр, возможно, другие вещи). Однако он не имеет доступных индексов (т. Е. Чтение или запись ptr [0] приводит к неопределенному поведению).
В этом контексте различие между константным выражением и выражением заключается не в том, является ли фактическое выражение постоянной времени компиляции (что, очевидно, 0), но определяет ли оно «последнее» измерение многомерного массива.Синтаксис определен в 5.3.4: 1.
C++ new хорошо определен. – AProgrammer