https://gcc.gnu.org/bugzilla/show_bug.cgi?id=70238
--- Comment #6 from Michael Matz <matz at gcc dot gnu.org> --- In this particular case the ABI could have been kept compatible if the _V2::error_category member _M_message (under the old ABI, for the new ABI the message(int) member) would have been added to the end of the struct, instead of into the middle. Then both vtables would have been layout compatible and old code would have worked. :-/