https://gcc.gnu.org/g:74f67ba3dcfd09209bed6265772d5fd9007ea605
commit r14-10706-g74f67ba3dcfd09209bed6265772d5fd9007ea605 Author: Jonathan Wakely <jwak...@redhat.com> Date: Fri Sep 20 17:35:48 2024 +0100 libstdc++: Document missing features for old std:string ABI [PR116777] There are several features that are not supported when using the old std::string ABI. It's possible that PR 81967 will get fixed, but the missing C++20 features almost certainly won't be. Document this in the manual. libstdc++-v3/ChangeLog: PR libstdc++/116777 * doc/xml/manual/using.xml: Document features that are not supported for the gcc4-compatible ABI. * doc/html/manual/using_dual_abi.html: Regenerate. (cherry picked from commit 82309222300acf68e345b32155df21e1b876144e) Diff: --- libstdc++-v3/doc/html/manual/using_dual_abi.html | 18 +++++++++++++++- libstdc++-v3/doc/xml/manual/using.xml | 26 +++++++++++++++++++++++- 2 files changed, 42 insertions(+), 2 deletions(-) diff --git a/libstdc++-v3/doc/html/manual/using_dual_abi.html b/libstdc++-v3/doc/html/manual/using_dual_abi.html index 916ac575f64b..939eedae3629 100644 --- a/libstdc++-v3/doc/html/manual/using_dual_abi.html +++ b/libstdc++-v3/doc/html/manual/using_dual_abi.html @@ -22,7 +22,7 @@ of the macro is <code class="literal">1</code> which causes the new ABI to be active, so to use the old ABI you must explicitly define the macro to <code class="literal">0</code> before including any library headers. - (Be aware that some GNU/Linux distributions configure GCC 5 differently so + (Be aware that some GNU/Linux distributions configured GCC 5 differently so that the default value of the macro is <code class="literal">0</code> and users must define it to <code class="literal">1</code> to enable the new ABI.) </p><p> Although the changes were made for C++11 conformance, the choice of ABI @@ -72,6 +72,22 @@ Handlers for <code class="classname">std::exception</code> will always catch iostreams exceptions, because the old and new type both inherit from <code class="classname">std::exception</code>. +</p><p> + Some features are not supported when using the old ABI, including: + </p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"> + Using <code class="classname">std::string::const_iterator</code> for + positional arguments to member functions such as + <code class="function">std::string::erase</code>. + </li><li class="listitem"> + Allocator propagation in <code class="classname">std::string</code>. + </li><li class="listitem"> + Using <code class="classname">std::string</code> at compile-time in + <code class="code">constexpr</code> functions. + </li><li class="listitem"> + Class <code class="classname">std::chrono::time_zone</code> and all related APIs. + </li><li class="listitem"> + The <code class="filename"><syncstream></code> header. + </li></ul></div><p> </p><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="manual.intro.using.abi.trouble"></a>Troubleshooting</h3></div></div></div><p> If you get linker errors about undefined references to symbols that involve types in the <code class="code">std::__cxx11</code> namespace or the tag <code class="code">[abi:cxx11]</code> then it probably indicates that you are trying to diff --git a/libstdc++-v3/doc/xml/manual/using.xml b/libstdc++-v3/doc/xml/manual/using.xml index 2baa99205173..92d3c0ed6b86 100644 --- a/libstdc++-v3/doc/xml/manual/using.xml +++ b/libstdc++-v3/doc/xml/manual/using.xml @@ -1356,7 +1356,7 @@ g++ -Winvalid-pch -I. -include stdc++.h -H -g -O2 hello.cc -o test.exe of the macro is <literal>1</literal> which causes the new ABI to be active, so to use the old ABI you must explicitly define the macro to <literal>0</literal> before including any library headers. - (Be aware that some GNU/Linux distributions configure GCC 5 differently so + (Be aware that some GNU/Linux distributions configured GCC 5 differently so that the default value of the macro is <literal>0</literal> and users must define it to <literal>1</literal> to enable the new ABI.) </para> @@ -1416,6 +1416,30 @@ g++ -Winvalid-pch -I. -include stdc++.h -H -g -O2 hello.cc -o test.exe <classname>std::exception</classname>. </para> +<para> + Some features are not supported when using the old ABI, including: + <itemizedlist> + <listitem> + Using <classname>std::string::const_iterator</classname> for + positional arguments to member functions such as + <function>std::string::erase</function>. + </listitem> + <listitem> + Allocator propagation in <classname>std::string</classname>. + </listitem> + <listitem> + Using <classname>std::string</classname> at compile-time in + <code>constexpr</code> functions. + </listitem> + <listitem> + Class <classname>std::chrono::time_zone</classname> and all related APIs. + </listitem> + <listitem> + The <filename class="headerfile"><syncstream></filename> header. + </listitem> + </itemizedlist> +</para> + <section xml:id="manual.intro.using.abi.trouble" xreflabel="Dual ABI Troubleshooting"><info><title>Troubleshooting</title></info> <para> If you get linker errors about undefined references to symbols