¿La herencia a través del desenrollado viola la estricta regla de alias?
Tengo una estructura X que hereda de la estructura Base. Sin embargo, en mi configuración actual, debido a la alineación, el tamaño de X es 24B:
typedef struct {
double_t a;
int8_t b;
} Base;
typedef struct {
Base base;
int8_t c;
} X;
Para guardar la memoria, me gustaría desenrollar la estructura Base, por lo que creé la estructura Y que contiene campos desde la Base (en el mismo orden, siempre al comienzo de la estructura), por lo que el tamaño de la estructura es 16B :
typedef struct {
double_t base_a;
int8_t base_b;
int8_t c;
} Y;
Luego usaré la instancia de struct Y en un método que espera un puntero a Base struct:
void print_base(Base* b)
{
printf("%f %d\n", b->a, b->b);
}
// ...
Y data;
print_base((Base*)&data);
¿El código anterior viola la estricta regla de alias y causa un comportamiento indefinido?