¿El acceso al primer campo de una estructura a través de un reparto en C viola los alias estrictos?

¿Viola este código el alias estricto?

struct {int x;} a;
*(int*)&a = 3

Más abstractamente, ¿es legal emitir entre diferentes tipos siempre que las operaciones de lectura / escritura primitivas sean de tipo correcto?