C ++ alias estricto cuando no se usa el puntero devuelto por la nueva ubicación

¿Puede esto potencialmente causar un comportamiento indefinido?

uint8_t storage[4];

// We assume storage is properly aligned here.
int32_t* intPtr = new((void*)storage) int32_t(4);

// I know this is ok:
int32_t value1 = *intPtr;
*intPtr = 5;

// But can one of the following cause UB?
int32_t value2 = reinterpret_cast<int32_t*>(storage)[0];
reinterpret_cast<int32_t*>(storage)[0] = 5;

char tiene reglas especiales para el estricto aliasing. Si yo usochar en lugar deuint8_t ¿Sigue siendo un comportamiento indefinido? ¿Qué más cambia?

Como el miembro DeadMG señaló,reinterpret_cast es dependiente de la implementacion Si uso un molde de estilo C(int32_t*)storage en cambio, ¿qué cambiaría?

Respuestas a la pregunta(2)

Su respuesta a la pregunta