RFC: Drop C++98 support for versioned namespace (i.e. unstable ABI mode)

Jonathan Wakely jwakely.gcc@gmail.com
Sat Aug 28 10:48:32 GMT 2021


Not something I plan to work on in the near future, but an idea worth sharing.

Before anybody panics, this does not affect the default configuration.
C++98 will still be supported. I'm only talking about the unstable ABI
build mode chosen when installing GCC, by
--enable-symvers=gnu-versioned-namespace. If you don't know what that
is, this RFC isn't something you need to worry about.

Currently there are some places where we can't define constructors,
assignment operators and destructors as defaulted, because it would
create an ABI incompatibility between C++98 (which can't use defaulted
members) and later standards.

That means that even for the unstable ABI (versioned namespace)
configuration, we are constrained by backwards compatibility (but
compat with older standards, not older GCC releases).

If we dropped C++98 support for the versioned namespace, it would open
up additional opportunities for improvements to the versioned
namespace mode.

As a specific example, std::allocator currently has a user-provided,
non-trivial default constructor. We can't define it as =default
because that doesn't work in C++98, and would make it trivial in
C++11, but still user-provided (and non-trivial) in C++98. We can't
make that change for the ABI stable mode anyway, because it would be
incompatible with older GCC releases. But we could do it for the
versioned namespace if we stopped supporting C++98.


More information about the Libstdc++ mailing list