¿Es legal alias un conjunto de caracteres a través de un puntero a int?

Sé que lo siguiente está explícitamente permitido en el estándar:

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

¿Qué hay de esto?

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

Esencialmente, estoy preguntando si las reglas de alias permiten acceder a una secuencia de caracteres a través de un puntero a otro tipo. Me gustaría referencias a las partes del estándar que indican de una manera u otra si es posible.

Algunas partes del estándar me han dejado en conflicto; (3.10.10) parece indicar que sería un comportamiento indefinido en el supuesto de que el tipo dinámico destorage no esint. Sin embargo, la definición de tipo dinámico no está clara para mí, y la existencia destd::aligned_storage me llevaría a creer que estoes posible.

Respuestas a la pregunta(3)

Su respuesta a la pregunta