Alias de matrices a través de estructuras

Estoy leyendo el párrafo 7 de 6.5 en ISO / IEC 9899: TC2.

Condonar el acceso de valor a un objeto a través de:

un tipo agregado o de unión que incluye uno de los tipos antes mencionados entre sus miembros (incluido, recursivamente, un miembro de una unión agregada o contenida),

Consulte el documento para conocer los tipos "mencionados", pero ciertamente incluyen el tipo efectivo del objeto.

Está en una sección anotada como:

La intención de esta lista es especificar aquellas circunstancias en las que un objeto puede tener un alias o no.

Leí esto como diciendo (por ejemplo) que lo siguiente está bien definido:

#include <stdlib.h>
#include <stdio.h>

typedef struct {
    unsigned int x;
} s;

int main(void){
    unsigned int array[3] = {73,74,75};

   s* sp=(s*)&array; 

   sp->x=80;

   printf("%d\n",array[0]);

   return EXIT_SUCCESS;
}

Este programa debería generar 80.

¡No estoy abogando por esto como una buena (o muy útil) idea y reconozco que en parte lo estoy interpretando de esa manera porque no puedo pensar qué más significa y no puedo creer que sea una oración sin sentido!

Dicho esto, no puedo ver una muy buena razón para prohibirlo. Lo que sí sabemos es que la alineación y el contenido de la memoria en esa ubicación son compatibles consp->x ¿entonces por qué no?

Parece ir tan lejos como para decir si agrego (digamos) undouble y; al final de la estructura todavía puedo accederarray[0] mediantesp->x De este modo.

Sin embargo, incluso si la matriz es más grande quesizeof(s) cualquier intento de accedersp->y es el comportamiento indefinido 'todas las apuestas fuera'.

¿Puedo pedir cortésmente que la gente diga qué es lo que condona esa oración en lugar de entrar en un giro plano gritando 'alias estricto UB alias estricto UB' como parece ser con demasiada frecuencia el camino de estas cosas?

Respuestas a la pregunta(3)

Su respuesta a la pregunta