Packed structs are backed by integers of equal size, so here your packed struct is backed by a u65.
And @sizeOf(u65) == 16.
This is a bit of a flaw with packed structs. Generally I would avoid odd packed struct sizes like this, or just use extern structs.
In this case you could also fix it by just making the union, and all other entries packed as well.
Here is another example. The outputs are consistent for all build modes.
I really want to make Packed union type packed, but it looks this is not supported now.
In this example the size ends up at 32 because of alignment. The packed struct has a size of 128 bits and @alignof(u128) == 16, so because of the union tag, this turns into 32 bytes total.
You can avoid this one by explicitly setting the alignment to a lower number.