https://gcc.gnu.org/bugzilla/show_bug.cgi?id=120009
--- Comment #5 from Richard Biener <rguenth at gcc dot gnu.org> --- Interaction with optional bitfield parts is interesting though. struct X { unsigned a : 1; T b : 1; unsigned b : 1; }; if 'T' is optional, would 'void b : 1' still take up 1 bit? Dependent on what type is used when it's active it will either terminate the current bitfield for the purpose of layout or not. Oh, and an empty struct doesn't work here of course ;) And note empty structures in C++ still have 1 byte size unless you use [[nonunique_address]] (or how it was called).