https://gcc.gnu.org/bugzilla/show_bug.cgi?id=111050
John Drouhard <john at drouhard dot dev> changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |john at drouhard dot dev --- Comment #10 from John Drouhard <john at drouhard dot dev> --- (In reply to frs.dumont from comment #9) > To be honest before that report I thought that preserving abi was just a > matter of preserving memory layout of types. I had no idea that member > methods mattered ! (I was the original reporter of this to TC) I think the specific issue here is that the member function `_M_valptr()` returns the address of the storage data member, and that _function_ is used in a construct call elsewhere to point to the address where a new object should be placed. It returns the address based on the offset from the beginning of the object which changed when the base class (which had its own data members) was removed. So, if the function isn't inlined, the symbol that's actually loaded by the dynamic linker during runtime will return a potentially bogus address for that data member if the definition of that function came from a library compiled with the other version.