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

            Bug ID: 104881
           Summary: Document libstdc++ ABI evolution for experimental
                    features
           Product: gcc
           Version: 12.0
            Status: UNCONFIRMED
          Keywords: documentation
          Severity: normal
          Priority: P3
         Component: libstdc++
          Assignee: unassigned at gcc dot gnu.org
          Reporter: redi at gcc dot gnu.org
  Target Milestone: ---

It might be helpful if the API evolution page at
https://gcc.gnu.org/onlinedocs/libstdc++/manual/api.html contained details of
breaking changes to experimental features.

For example, gcc-9.1 was the first release with non-experimental C++17 support,
and had ABI changes to std::variant compared with previous releases (which is
why you shouldn't mix experimental features from different releases).

r8-1649-g705037247447f4 made the copy constructor trivial in some cases, making
8.1.0 incompatible with 7.x

r9-6369-g669a6fdcb436ae rewrote large parts of std::variant, making 9.1.0
incompatible with 8.x (and r9-7106-g038bc9bfd6dfd9 and 
r9-6715-gda97b98ad34145 made further changes).

Similarly, gcc-8.1.0 had triviality changes for std::optional (r8-6100), and
maybe again for 9.1.0 (r9-4229).


There needs to be a caveat about the documentation of those changes being
incomplete, so users don't assume that if it's not mentioned there, it's safe
to use across versions. It's not supported, and the doc should not be taken as
a guarantee of what can be relied on.

Reply via email to