[PATCH] libstdc++/doc: Document generate_canonical and variant compat macros.

Jonathan Wakely jwakely@redhat.com
Mon Dec 22 17:54:38 GMT 2025


On Mon, 22 Dec 2025 at 11:06, Tomasz Kamiński <tkaminsk@redhat.com> wrote:
>
> The _GLIBCXX_USE_OLD_GENERATE_CANONICAL was introduced by
> r16-6177-g866bc8a9214b1d that implemented P0952R2 [1] resolution
> for LWG2524 as DR against C++20.
>
> The _GLIBCXX_USE_VARIANT_CXX17_OLD_ABI was introduced by
> r16-6301-gb3c167b61fd75f that resovled PR112591.
>
> [1] https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2023/p0952r2.html
>
> libstdc++-v3/ChangeLog:
>
>         * doc/html/manual/using_macros.html: Regenerate.
>         * doc/xml/manual/using.xml: Add entries for
>         _GLIBCXX_USE_OLD_GENERATE_CANONICAL and
>         _GLIBCXX_USE_VARIANT_CXX17_OLD_ABI.
> ---
> OK for trunk?
>
>  .../doc/html/manual/using_macros.html         | 12 +++++++++++
>  libstdc++-v3/doc/xml/manual/using.xml         | 20 +++++++++++++++++++
>  2 files changed, 32 insertions(+)
>
> diff --git a/libstdc++-v3/doc/html/manual/using_macros.html b/libstdc++-v3/doc/html/manual/using_macros.html
> index c1406ec76f7..08649c1dfaa 100644
> --- a/libstdc++-v3/doc/html/manual/using_macros.html
> +++ b/libstdc++-v3/doc/html/manual/using_macros.html
> @@ -137,4 +137,16 @@
>         When not defined, durations, time points, and calendar types are
>         available for freestanding, but the standard clocks and the time zone
>         database are not (because they require OS support).
> +      </p></dd><dt><span class="term"><code class="code">_GLIBCXX_USE_OLD_GENERATE_CANONICAL</code></span></dt><dd><p>
> +       Undefined by default. When defined <code class="code">generate_canonical</code>
> +       reverts to algorithm used by before implementation of
> +       <a class="link" href="https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2023/p0952r2.html" target="_top">P0952
> +       A new specification for std::generate_canonical</a> in GCC-16.
> +      </p></dd><dt><span class="term"><code class="code">_GLIBCXX_USE_VARIANT_CXX17_OLD_ABI</code></span></dt><dd><p>
> +       Undefined by default. When defined <code class="code">variant</code> in C++17
> +       mode will revert to non-conforming implementation used prior
> +       resolution of
> +       <a class="link" href="https://gcc.gnu.org/bugzilla/show_bug.cgi?id=112591" target="_top">PR112591</a>
> +       in GCC-16.
> +       Has no impact for C++20 or later modes.
>        </p></dd></dl></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="using_headers.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="using.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="using_dual_abi.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Headers </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Dual ABI</td></tr></table></div></body></html>
> \ No newline at end of file
> diff --git a/libstdc++-v3/doc/xml/manual/using.xml b/libstdc++-v3/doc/xml/manual/using.xml
> index bec5419d587..0a9f9f6e46c 100644
> --- a/libstdc++-v3/doc/xml/manual/using.xml
> +++ b/libstdc++-v3/doc/xml/manual/using.xml
> @@ -1343,6 +1343,26 @@ g++ -Winvalid-pch -I. -include stdc++.h -H -g -O2 hello.cc -o test.exe
>         database are not (because they require OS support).
>        </para>
>      </listitem></varlistentry>
> +    <varlistentry><term><code>_GLIBCXX_USE_OLD_GENERATE_CANONICAL</code></term>
> +    <listitem>
> +      <para>
> +       Undefined by default. When defined <code>generate_canonical</code>
> +       reverts to algorithm used by before implementation of

"reverts to the algorithm used prior to the implementation of"

> +       <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2023/p0952r2.html">P0952
> +       A new specification for std::generate_canonical</link> in GCC-16.
> +      </para>
> +    </listitem></varlistentry>
> +    <varlistentry><term><code>_GLIBCXX_USE_VARIANT_CXX17_OLD_ABI</code></term>
> +    <listitem>
> +      <para>
> +       Undefined by default. When defined <code>variant</code> in C++17
> +       mode will revert to non-conforming implementation used prior

"mode will revert to the non-conforming implementation used prior to the"

OK with those two changes (and don't forget to regenerate the HTML).
Thanks for updating the docs with this.

> +       resolution of
> +       <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="https://gcc.gnu.org/bugzilla/show_bug.cgi?id=112591">PR112591</link>
> +       in GCC-16.
> +       Has no impact for C++20 or later modes.
> +      </para>
> +    </listitem></varlistentry>
>      </variablelist>
>
>    </section>
> --
> 2.52.0
>



More information about the Libstdc++ mailing list