Ist es zulässig, in C ++ einen Zeiger auf eine Arrayreferenz mit static_cast umzusetzen?

Ich habe einen ZeigerT * pValues das möchte ich alsT (&values)[N]

In dieser SO Antworthttps://stackoverflow.com/a/2634994/239916ist der vorgeschlagene Weg, dies zu tun

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

Die Sorge, die ich habe, ist. In seinem BeispielpValues&nbsp;wird auf folgende Weise initialisiert

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

Meine Frage ist, ob das Cast-Konstrukt legal ist, wennpValues&nbsp;stammt aus einem der folgenden Konstrukte:

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