The standard defines when two types are layout-compatible. But, I don't see anywhere in the standard what the consequences are when two types are layout-compatible. It seems that layout-compatible is a definition which is not used anywhere.
What is the purpose of layout-compatible?
Note: Supposedly, it could mean that the types have the same layout (
offsetof is the same for each corresponding member), so for example, for trivially copyable types, underlying bytes can be copied between them. But I don't see something like this in the standard.
The standard does define one specific case where layout compatibility matters: in
unions. If two members are layout-compatible, and one of them is the active
union member, then you may access that object through pointers/references to any layout-compatible member of that
union. This is a consequence of the "common initial sequence" rule.