Rough summary: Clang 16 will include a couple of fixes for GCC Itanium ABI:
- defaulted special members won’t cause a type to become non-POD-for-the-purposes-of-Itanium-ABI
- non-POD members of packed structs will not themselves be packed (their alignment will be respected)
(3) there’s a new warning (rGec273d3e3a8c) that you can use to identify places where packed structs have non-pod members
A couple of recent commits upstream (& some legacy of a commit made back in Q1) have gone into Clang recently - specifically rG7846d590033e as well as rG037f85668126 and rG277123376ce0
The older one went in in January, but owing to the fallout was not shipped in Clang 14 or 15 - now that the recent POD fix (which reduces the incidence of the older change) is in, both/all will ship in Clang 16.