You misinterpreted what I said: *we* want to break GCC's assumptions because while the C++ standard guarantees alignment on sizeof(storage_type) we want this to be usable in other situations where this is notlas the case.

Re: wording... "This class is used in some packed structures that do not guarantee proper alignment. Therefore we have to use #pragma pack here not to pack the members of the class, but instead to break GCC's assumption that the members of the class are aligned on sizeof(StorageType)."

Note that as I said before on IRC I'm still not sure if #pragma pack does what you want to do here or just breaks some GCC optimizations that just happen to cause the issue. I would expect #pragma pack to only change alignment *inside* the class itself, not changing assumptions as to whether or not the whole class (and by consequence its first member) is aligned properly. It might be worth asking some GCC people about this.