Czy legalne jest rzucanie wskaźnika do odwołania do tablicy przy użyciu static_cast w C ++?

Mam wskaźnikT * pValues które chciałbym zobaczyć jakoT (&values)[N]

W tej odpowiedzi SOhttps://stackoverflow.com/a/2634994/239916, proponowanym sposobem na to jest

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

Martwię się o to. W swoim przykładziepValues jest inicjowany w następujący sposób

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

Moje pytanie brzmi, czy odlewana konstrukcja jest legalna, jeślipValues pochodzi z dowolnej z następujących konstrukcji:

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

questionAnswers(1)

yourAnswerToTheQuestion