¿Esto realmente rompe las reglas de alias estricto?

Cuando compilo este código de muestra usando g ++, recibo esta advertencia:

advertencia: desreferenciar el puntero de tipo punteado romperá las reglas de alias estricto[-Wstrict-aliasing]

El código:

#include <iostream>

int main() 
{
   alignas(int) char data[sizeof(int)];
   int *myInt = new (data) int;
   *myInt = 34;

   std::cout << *reinterpret_cast<int*>(data);
}

En este caso, nodata alias an int y, por lo tanto, devolverlo a un int no violaría las estrictas reglas de aliasing? ¿O me estoy perdiendo algo aquí?

Editar: Extraño, cuando definodata Me gusta esto:

alignas(int) char* data = new char[sizeof(int)];

La advertencia del compilador desaparece. ¿La asignación de la pila hace una diferencia con alias estricto? ¿El hecho de que es unchar[] y no unchar* significa que en realidad no puede alias de ningún tipo?

Respuestas a la pregunta(2)

Su respuesta a la pregunta