Stewart Gordon wrote:
Frits van Bommel wrote:
Stewart Gordon wrote:
<snip>
But the offset of a union member is always zero.  So what would this do?

It should make sure the union is aligned appropriately in a containing struct, meaning U.alignof >= M.alignof for all members M. Specifying per-member alignment allows you to change that member's effect on the union's alignment.

But alignment of a member within a structure and alignment of the whole structure relative to an outer one are two distinct concepts. What sense is there in being able to use one to control the other?

Most obviously, a union U consisting of a single member x should have
U.alignof == x.alignof.
<snip>

Yes, by propagating the union's alignment (relative to the containing struct) to the member.

But the union's alignment needs to be sufficient for all members, so it depends on the maximum alignment of all members.

That's only because you want to be able to attach alignments to individual members of a union. And I still don't know why.

I'm not sure why you think unions are so different to structs. They are identical in most respects -- including requirements for alignment of members.


If you want a union to have a certain alignment relative to a struct in which it's contained, in what cases is it not sufficient to put the align attribute on the union's instance in the struct?

In cases where you don't know what the containing struct is. The union may just be a type returned from a template, for example.

Reply via email to