Законно ли приводить указатель на ссылку на массив, используя static_cast в C ++?

У меня есть указательT * pValues что я хотел бы рассматривать какT (&values)[N]

В этом так ответhttps://stackoverflow.com/a/2634994/239916Предлагаемый способ сделать это

T (&values)[N] = *static_cast<T(*)[N]>(static_cast<void*>(pValues));

Я беспокоюсь об этом. В его примереpValues инициализируется следующим образом

T theValues[N];
T * pValues = theValues;

Мой вопрос, является ли приведенная конструкция законной, еслиpValues происходит от любой из следующих конструкций:

1:
T theValues[N + M]; // M > 0
T * pValues = theValues;
2:
T * pValues = new T[N + M]; // M >= 0

Ответы на вопрос(1)

Ваш ответ на вопрос