https://gcc.gnu.org/bugzilla/show_bug.cgi?id=109405

Jonathan Wakely <redi at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
           Keywords|                            |ABI

--- Comment #1 from Jonathan Wakely <redi at gcc dot gnu.org> ---
This is expected. The unique_ptr implementation uses tuple<int*, SF> which is
similarly dependent on whether the tuple elements are final or not. Originally,
that was because we used inheritance in tuple, in order to take advantage of
the empty-base class optimization. Obviously we can't use inheritance for final
types.

These days we do not use inheritance, we use the [[no_unique_address]]
attribute so that empty tuple elements take no space. But to avoid an ABI
incompatibility with previous versions of GCC, the attribute is only used for
non-final types.

There's no way to fix this without breaking the library's ABI.

Reply via email to