A herança via desenrolamento viola a regra estrita de aliasing?
Eu tenho um struct X que herda de struct Base. No entanto, na minha configuração atual, devido ao alinhamento, o tamanho de X é 24B:
typedef struct {
double_t a;
int8_t b;
} Base;
typedef struct {
Base base;
int8_t c;
} X;
Para economizar memória, gostaria de descontrair a estrutura Base, então criei a estrutura Y que contém os campos da Base (na mesma ordem, sempre no início da estrutura), para que o tamanho da estrutura seja 16B :
typedef struct {
double_t base_a;
int8_t base_b;
int8_t c;
} Y;
Então, eu vou usar a instância da estrutura Y em um método que espera um ponteiro para a estrutura Base:
void print_base(Base* b)
{
printf("%f %d\n", b->a, b->b);
}
// ...
Y data;
print_base((Base*)&data);
O código acima viola a regra estrita de alias e causa comportamento indefinido?