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