Aliasing estrito do C ++ quando não estiver usando o ponteiro retornado pelo posicionamento new

Isso pode causar um comportamento 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&nbsp;tem regras especiais para aliasing estrito. Se eu usarchar&nbsp;ao invés deuint8_t&nbsp;ainda é um comportamento indefinido? O que mais muda?

Como o membro DeadMG apontou,reinterpret_cast&nbsp;depende da implementação. Se eu usar um elenco no estilo C(int32_t*)storage&nbsp;em vez disso, o que mudaria?