É legal alias uma matriz de caracteres através de um ponteiro para int?

Eu sei que o seguinte é explicitamente permitido no padrão:

int n = 0;
char *ptr = (char *) &n;
cout << *ptr;

Que tal isso?

alignas(int) char storage[sizeof(int)];
int *ptr = (int *) &storage[0];
*ptr = 0;
cout << *ptr;

Essencialmente, estou perguntando se as regras de aliasing permitem que uma sequência de caracteres seja acessada através de um ponteiro para outro tipo. Eu gostaria de referências às partes do padrão que indicam uma maneira ou outra, se possível.

Algumas partes do padrão me deixaram em conflito; (3.10.10) parece indicar que seria um comportamento indefinido na suposição de que o tipo dinâmico destorage não éint. No entanto, a definição de tipo dinâmico não é clara para mim e a existência destd::aligned_storage me levaria a acreditar que issoé possível.

questionAnswers(3)

yourAnswerToTheQuestion