I've now prepared the patch to support following config: --disable-libstdcxx-dual-abi --with-default-libstdcxx-abi=new and so detected yet another problem with src/c++98/compatibility.cc. We need basic_istream<>::ignore(streamsize) definitions that rely here but not the rest of it. François On 17/08/2023 19:17, François Dumont wrote: > > Another fix to define __cow_string(const std::string&) in > cxx11-stdexcept.cc even if ! _GLIBCXX_USE_DUAL_ABI. > > On 13/08/2023 21:51, François Dumont wrote: >> >> Here is another version with enhanced sizeof/alignof static_assert in >> string-inst.cc for the std::__cow_string definition from . >> The assertions in cow-stdexcept.cc are now checking the definition >> which is in the same file. >> >> On 13/08/2023 15:27, François Dumont wrote: >>> >>> Here is the fixed patch tested in all 3 modes: >>> >>> - _GLIBCXX_USE_DUAL_ABI >>> >>> - !_GLIBCXX_USE_DUAL_ABI && !_GLIBCXX_USE_CXX11_ABI >>> >>> - !_GLIBCXX_USE_DUAL_ABI && _GLIBCXX_USE_CXX11_ABI >>> >>> I don't know what you have in mind for the change below but I wanted >>> to let you know that I tried to put COW std::basic_string into a >>> nested __cow namespace when _GLIBCXX_USE_CXX11_ABI. But it had more >>> impact on string-inst.cc so I preferred the macro substitution approach. >>> >>> There are some test failing when !_GLIBCXX_USE_CXX11_ABI that are >>> unrelated with my changes. I'll propose fixes in coming days. >>> >>>     libstdc++: [_GLIBCXX_INLINE_VERSION] Use cxx11 abi [PR83077] >>> >>>     Use cxx11 abi when activating versioned namespace mode. To do >>> support >>>     a new configuration mode where !_GLIBCXX_USE_DUAL_ABI and >>> _GLIBCXX_USE_CXX11_ABI. >>> >>>     The main change is that std::__cow_string is now defined >>> whenever _GLIBCXX_USE_DUAL_ABI >>>     or _GLIBCXX_USE_CXX11_ABI is true. Implementation is using >>> available std::string in >>>     case of dual abi and a subset of it when it's not. >>> >>>     On the other side std::__sso_string is defined only when >>> _GLIBCXX_USE_DUAL_ABI is true >>>     and _GLIBCXX_USE_CXX11_ABI is false. Meaning that >>> std::__sso_string is a typedef for the >>>     cow std::string implementation when dual abi is disabled and cow >>> string is being used. >>> >>>     libstdcxx-v3/ChangeLog: >>> >>>             PR libstdc++/83077 >>>             * acinclude.m4 [GLIBCXX_ENABLE_LIBSTDCXX_DUAL_ABI]: >>> Default to "new" libstdcxx abi. >>>             * config/locale/dragonfly/monetary_members.cc >>> [!_GLIBCXX_USE_DUAL_ABI]: Define money_base >>>             members. >>>             * config/locale/generic/monetary_members.cc >>> [!_GLIBCXX_USE_DUAL_ABI]: Likewise. >>>             * config/locale/gnu/monetary_members.cc >>> [!_GLIBCXX_USE_DUAL_ABI]: Likewise. >>>             * config/locale/gnu/numeric_members.cc >>> [!_GLIBCXX_USE_DUAL_ABI](__narrow_multibyte_chars): Define. >>>             * configure: Regenerate. >>>             * include/bits/c++config >>> [_GLIBCXX_INLINE_VERSION](_GLIBCXX_NAMESPACE_CXX11, >>> _GLIBCXX_BEGIN_NAMESPACE_CXX11): >>>             Define empty. >>> [_GLIBCXX_INLINE_VERSION](_GLIBCXX_END_NAMESPACE_CXX11, >>> _GLIBCXX_DEFAULT_ABI_TAG): >>>             Likewise. >>>             * include/bits/cow_string.h [!_GLIBCXX_USE_CXX11_ABI]: >>> Define a light version of COW >>>             basic_string as __std_cow_string for use in stdexcept. >>>             * include/std/stdexcept [_GLIBCXX_USE_CXX11_ABI]: Define >>> __cow_string. >>>             (__cow_string(const char*)): New. >>>             (__cow_string::c_str()): New. >>>             * python/libstdcxx/v6/printers.py >>> (StdStringPrinter::__init__): Set self.new_string to True >>>             when std::__8::basic_string type is found. >>>             * src/Makefile.am >>> [ENABLE_SYMVERS_GNU_NAMESPACE](ldbl_alt128_compat_sources): Define >>> empty. >>>             * src/Makefile.in: Regenerate. >>>             * src/c++11/Makefile.am (cxx11_abi_sources): Rename into... >>>             (dual_abi_sources): ...this. Also move >>> cow-local_init.cc, cxx11-hash_tr1.cc, >>>             cxx11-ios_failure.cc entries to... >>>             (sources): ...this. >>>             (extra_string_inst_sources): Move cow-fstream-inst.cc, >>> cow-sstream-inst.cc, cow-string-inst.cc, >>>             cow-string-io-inst.cc, cow-wtring-inst.cc, >>> cow-wstring-io-inst.cc, cxx11-locale-inst.cc, >>>             cxx11-wlocale-inst.cc entries to... >>>             (inst_sources): ...this. >>>             * src/c++11/Makefile.in: Regenerate. >>>             * src/c++11/cow-fstream-inst.cc >>> [_GLIBCXX_USE_CXX11_ABI]: Skip definitions. >>>             * src/c++11/cow-locale_init.cc [_GLIBCXX_USE_CXX11_ABI]: >>> Skip definitions. >>>             * src/c++11/cow-sstream-inst.cc >>> [_GLIBCXX_USE_CXX11_ABI]: Skip definitions. >>>             * src/c++11/cow-stdexcept.cc [_GLIBCXX_USE_CXX11_ABI]: >>> Include . >>>             [_GLIBCXX_USE_DUAL_ABI || >>> _GLIBCXX_USE_CXX11_ABI](__cow_string): Redefine before >>>             including . Define >>> _GLIBCXX_DEFINE_STDEXCEPT_INSTANTIATIONS so that >>>             __cow_string definition in is skipped. >>>             [_GLIBCXX_USE_CXX11_ABI]: Skip Transaction Memory TS >>> definitions. >>>             Move static_assert to check std::_cow_string abi layout >>> to... >>>             * src/c++11/string-inst.cc: ...here. >>>             (_GLIBCXX_DEFINING_CXX11_ABI_INSTANTIATIONS): Define >>> following _GLIBCXX_USE_CXX11_ABI >>>             value. >>>             [_GLIBCXX_USE_CXX11_ABI && >>> !_GLIBCXX_DEFINING_CXX11_ABI_INSTANTIATIONS]: >>>             Define _GLIBCXX_DEFINING_COW_STRING_INSTANTIATIONS. >>> Include . >>>             Define basic_string as __std_cow_string for the current >>> translation unit. >>>             * src/c++11/cow-string-inst.cc [_GLIBCXX_USE_CXX11_ABI]: >>> Skip definitions. >>>             * src/c++11/cow-string-io-inst.cc >>> [_GLIBCXX_USE_CXX11_ABI]: Skip definitions. >>>             * src/c++11/cow-wstring-inst.cc >>> [_GLIBCXX_USE_CXX11_ABI]: Skip definitions. >>>             * src/c++11/cow-wstring-io-inst.cc >>> [_GLIBCXX_USE_CXX11_ABI]: Skip definitions. >>>             * src/c++11/cxx11-hash_tr1.cc [!_GLIBCXX_USE_CXX11_ABI]: >>> Skip definitions. >>>             * src/c++11/cxx11-ios_failure.cc >>> [!_GLIBCXX_USE_CXX11_ABI]: Skip definitions. >>>             [!_GLIBCXX_USE_DUAL_ABI] (__ios_failure): Remove. >>>             * src/c++11/cxx11-locale-inst.cc: Cleanup, just include >>> locale-inst.cc. >>>             * src/c++11/cxx11-stdexcept.cc >>> [!_GLIBCXX_USE_CXX11_ABI]: Skip definitions. >>>             * src/c++11/cxx11-wlocale-inst.cc >>> [!_GLIBCXX_USE_CXX11_ABI]: Skip definitions. >>>             * src/c++11/locale-inst-numeric.h >>> [!_GLIBCXX_USE_DUAL_ABI](std::use_facet>, >>> std::use_facet>): Instantiate. >>> [!_GLIBCXX_USE_DUAL_ABI](std::has_facet>, >>> std::has_facet>): Instantiate. >>>             [!_GLIBCXX_USE_DUAL_ABI](std::num_get>> istreambuf_iterator>): Instantiate. >>>             [!_GLIBCXX_USE_DUAL_ABI](std::num_put>> ostreambuf_iterator>): Instantiate. >>>             * src/c++11/locale-inst.cc [!_GLIBCXX_USE_DUAL_ABI]: >>> Build only when configured >>>             _GLIBCXX_USE_CXX11_ABI is equal to currently built abi. >>> [!_GLIBCXX_USE_DUAL_ABI](__moneypunct_cache): Instantiate. >>> [!_GLIBCXX_USE_DUAL_ABI](__moneypunct_cache): Instantiate. >>> [!_GLIBCXX_USE_DUAL_ABI](__numpunct_cache): Instantiate. >>>             [!_GLIBCXX_USE_DUAL_ABI](__timepunct): Instantiate. >>> [!_GLIBCXX_USE_DUAL_ABI](__timepunct_cache): Instantiate. >>>             [!_GLIBCXX_USE_DUAL_ABI](time_put>> ostreambuf_iterator>): Instantiate. >>>             [!_GLIBCXX_USE_DUAL_ABI](time_put_byname>> ostreambuf_iterator>): Instantiate. >>> [!_GLIBCXX_USE_DUAL_ABI](__ctype_abstract_base): Instantiate. >>>             [!_GLIBCXX_USE_DUAL_ABI](ctype_byname): Instantiate. >>> [!_GLIBCXX_USE_DUAL_ABI](__codecvt_abstract_base>> mbstate_t>): Instantiate. >>>             [!_GLIBCXX_USE_DUAL_ABI](codecvt_byname>> mbstate_t>): Instantiate. >>> [!_GLIBCXX_USE_DUAL_ABI](use_facet>(const locale&)): >>> Instantiate. >>> [!_GLIBCXX_USE_DUAL_ABI](use_facet>> mbstate_t>>(const locale&)): Instantiate. >>> [!_GLIBCXX_USE_DUAL_ABI](use_facet<__timepunct>(const locale&)): >>> Instantiate. >>> [!_GLIBCXX_USE_DUAL_ABI](use_facet>(const locale&)): >>> Instantiate. >>> [!_GLIBCXX_USE_DUAL_ABI](has_facet>(const locale&)): >>> Instantiate. >>> [!_GLIBCXX_USE_DUAL_ABI](has_facet>> mbstate_t>>(const locale&)): Instantiate. >>> [!_GLIBCXX_USE_DUAL_ABI](has_facet<__timepunct>(const locale&)): >>> Instantiate. >>> [!_GLIBCXX_USE_DUAL_ABI](has_facet>(const locale&)): >>> Instantiate. >>> [!_GLIBCXX_USE_DUAL_ABI](__add_grouping): Define. >>>             [!_GLIBCXX_USE_DUAL_ABI](__pad>): >>> Instantiate. >>>             [!_GLIBCXX_USE_DUAL_ABI](__int_to_char(C*, unsigned >>> long, const C*, >>>             ios_base::fmtflags, bool)): Define. >>>             [!_GLIBCXX_USE_DUAL_ABI](__int_to_char(C*, unsigned long >>> long, const C*, >>>             ios_base::fmtflags, bool)): Define. >>>             * src/c++11/wlocale-inst.cc [!_GLIBCXX_USE_CXX11_ABI]: >>> Skip definitions. >>>             * src/c++98/Makefile.am (cxx11_abi_sources): Remove, >>> unique cow-istream-string.cc entry >>>             move to... >>>             (inst_sources): ...this. >>>             * src/c++98/Makefile.in: Regenerate. >>>             * src/c++98/cow-istream-string.cc: Include >>> . >>>             [_GLIBCXX_USE_CXX11_ABI]: Skip definitions. >>>             * src/c++98/hash_tr1.cc [_GLIBCXX_USE_CXX11_ABI]: Skip >>> definitions. >>>             * src/c++98/ios_failure.cc >>> [_GLIBCXX_USE_CXX11_ABI][_GLIBCXX_USE_DUAL_ABI]: Skip definitions. >>>             * src/c++98/istream-string.cc [!_GLIBCXX_USE_DUAL_ABI]: >>> Build only when configured >>>             _GLIBCXX_USE_CXX11_ABI is equal to currently built abi. >>>             * src/c++98/locale_facets.cc >>> [_GLIBCXX_USE_CXX11_ABI](__verify_grouping): Remove. >>>             * src/c++98/stdexcept.cc >>>             [_GLIBCXX_USE_CXX11_ABI](logic_error(const string&): Remove. >>>             [_GLIBCXX_USE_CXX11_ABI](domain_error(const string&): >>> Remove. >>>             [_GLIBCXX_USE_CXX11_ABI](invalid_argument(const >>> string&): Remove. >>>             [_GLIBCXX_USE_CXX11_ABI](length_error(const string&): >>> Remove. >>>             [_GLIBCXX_USE_CXX11_ABI](out_of_range(const string&): >>> Remove. >>>             [_GLIBCXX_USE_CXX11_ABI](runtime_error(const string&): >>> Remove. >>>             [_GLIBCXX_USE_CXX11_ABI](range_error(const string&): Remove. >>>             [_GLIBCXX_USE_CXX11_ABI](overflow_error(const string&): >>> Remove. >>>             [_GLIBCXX_USE_CXX11_ABI](underflow_error(const string&): >>> Remove. >>> >>> Ok to commit ? >>> >>> François >>> >>> On 11/08/2023 09:51, Jonathan Wakely wrote: >>>> >>>> >>>> On Fri, 11 Aug 2023, 06:44 François Dumont via Libstdc++, >>>> > wrote: >>>> >>>> I hadn't tested the most basic default configuration and it is >>>> failing, >>>> >>>> >>>> I did wonder about that when you said which configurations you had >>>> tested :) >>>> >>>> >>>> >>>> >>>> I need some more time yet. >>>> >>>> >>>> OK, no problem. >>>> >>>> I actually have an idea for replacing the __cow_string hack with >>>> something better, which I will try to work on next week. That might >>>> make things simpler for you, as you won't need the __std_cow_string >>>> macro. >>>> >>>> >>>> >>>> >>>> >>>> François >>>> >>>> >>>> On 10/08/2023 07:13, François Dumont wrote: >>>> > Hi >>>> > >>>> > I've eventually completed this work. >>>> > >>>> > This evolution will allow to build libstdc++ without dual abi >>>> and >>>> > using cxx11 abi. For the moment such a config is only accessible >>>> > through the --enable-symvers=gnu-versioned-namespace >>>> configuration. >>>> > >>>> >     libstdc++: [_GLIBCXX_INLINE_VERSION] Use cxx11 abi [PR83077] >>>> > >>>> >     Use cxx11 abi when activating versioned namespace mode. >>>> > >>>> >     libstdcxx-v3/ChangeLog: >>>> > >>>> >             PR libstdc++/83077 >>>> >             * acinclude.m4 [GLIBCXX_ENABLE_LIBSTDCXX_DUAL_ABI]: >>>> > Default to "new" libstdcxx abi. >>>> >             * config/locale/dragonfly/monetary_members.cc >>>> > [!_GLIBCXX_USE_DUAL_ABI]: Define money_base >>>> >             members. >>>> >             * config/locale/generic/monetary_members.cc >>>> > [!_GLIBCXX_USE_DUAL_ABI]: Likewise. >>>> >             * config/locale/gnu/monetary_members.cc >>>> > [!_GLIBCXX_USE_DUAL_ABI]: Likewise. >>>> >             * config/locale/gnu/numeric_members.cc >>>> > [!_GLIBCXX_USE_DUAL_ABI](__narrow_multibyte_chars): Define. >>>> >             * configure: Regenerate. >>>> >             * include/bits/c++config >>>> > [_GLIBCXX_INLINE_VERSION](_GLIBCXX_NAMESPACE_CXX11, >>>> > _GLIBCXX_BEGIN_NAMESPACE_CXX11): >>>> >             Define empty. >>>> > [_GLIBCXX_INLINE_VERSION](_GLIBCXX_END_NAMESPACE_CXX11, >>>> > _GLIBCXX_DEFAULT_ABI_TAG): >>>> >             Likewise. >>>> >             * include/bits/cow_string.h >>>> [!_GLIBCXX_USE_CXX11_ABI]: >>>> > Define a light version of COW >>>> >             basic_string as __std_cow_string for use in >>>> stdexcept. >>>> >             * include/std/stdexcept [_GLIBCXX_USE_CXX11_ABI]: >>>> Define >>>> > __cow_string. >>>> >             (__cow_string(const char*)): New. >>>> >             (__cow_string::c_str()): New. >>>> >             * python/libstdcxx/v6/printers.py >>>> > (StdStringPrinter::__init__): Set self.new_string to True >>>> >             when std::__8::basic_string type is found. >>>> >             * src/Makefile.am >>>> > [ENABLE_SYMVERS_GNU_NAMESPACE](ldbl_alt128_compat_sources): >>>> Define empty. >>>> >             * src/Makefile.in: Regenerate. >>>> >             * src/c++11/Makefile.am (cxx11_abi_sources): >>>> Rename into... >>>> >             (dual_abi_sources): ...this. Also move >>>> cow-local_init.cc, >>>> > cxx11-hash_tr1.cc, >>>> >             cxx11-ios_failure.cc entries to... >>>> >             (sources): ...this. >>>> >             (extra_string_inst_sources): Move >>>> cow-fstream-inst.cc, >>>> > cow-sstream-inst.cc, cow-string-inst.cc, >>>> >             cow-string-io-inst.cc, cow-wtring-inst.cc, >>>> > cow-wstring-io-inst.cc, cxx11-locale-inst.cc, >>>> >             cxx11-wlocale-inst.cc entries to... >>>> >             (inst_sources): ...this. >>>> >             * src/c++11/Makefile.in: Regenerate. >>>> >             * src/c++11/cow-fstream-inst.cc >>>> [_GLIBCXX_USE_CXX11_ABI]: >>>> > Skip definitions. >>>> >             * src/c++11/cow-locale_init.cc >>>> [_GLIBCXX_USE_CXX11_ABI]: >>>> > Skip definitions. >>>> >             * src/c++11/cow-sstream-inst.cc >>>> [_GLIBCXX_USE_CXX11_ABI]: >>>> > Skip definitions. >>>> >             * src/c++11/cow-stdexcept.cc >>>> [_GLIBCXX_USE_CXX11_ABI]: >>>> > Include . >>>> >             [_GLIBCXX_USE_DUAL_ABI || >>>> > _GLIBCXX_USE_CXX11_ABI](__cow_string): Redefine before including >>>> >             . Define >>>> > _GLIBCXX_DEFINE_STDEXCEPT_INSTANTIATIONS so that __cow_string >>>> definition >>>> >             in is skipped. >>>> >             [_GLIBCXX_USE_CXX11_ABI]: Skip Transaction Memory TS >>>> > definitions. >>>> >             * src/c++11/cow-string-inst.cc >>>> [_GLIBCXX_USE_CXX11_ABI]: >>>> > Skip definitions. >>>> >             * src/c++11/cow-string-io-inst.cc >>>> > [_GLIBCXX_USE_CXX11_ABI]: Skip definitions. >>>> >             * src/c++11/cow-wstring-inst.cc >>>> [_GLIBCXX_USE_CXX11_ABI]: >>>> > Skip definitions. >>>> >             * src/c++11/cow-wstring-io-inst.cc >>>> > [_GLIBCXX_USE_CXX11_ABI]: Skip definitions. >>>> >             * src/c++11/cxx11-hash_tr1.cc >>>> [!_GLIBCXX_USE_CXX11_ABI]: >>>> > Skip definitions. >>>> >             * src/c++11/cxx11-ios_failure.cc >>>> > [!_GLIBCXX_USE_CXX11_ABI]: Skip definitions. >>>> >             [!_GLIBCXX_USE_DUAL_ABI] (__ios_failure): Remove. >>>> >             * src/c++11/cxx11-locale-inst.cc: Cleanup, just >>>> include >>>> > locale-inst.cc. >>>> >             * src/c++11/cxx11-stdexcept.cc >>>> [!_GLIBCXX_USE_CXX11_ABI]: >>>> > Skip definitions. >>>> >             * src/c++11/cxx11-wlocale-inst.cc >>>> > [!_GLIBCXX_USE_CXX11_ABI]: Skip definitions. >>>> >             * src/c++11/locale-inst-numeric.h >>>> > [!_GLIBCXX_USE_DUAL_ABI](std::use_facet>, >>>> > std::use_facet>): Instantiate. >>>> > [!_GLIBCXX_USE_DUAL_ABI](std::has_facet>, >>>> > std::has_facet>): Instantiate. >>>> > [!_GLIBCXX_USE_DUAL_ABI](std::num_get>>> > istreambuf_iterator>): Instantiate. >>>> > [!_GLIBCXX_USE_DUAL_ABI](std::num_put>>> > ostreambuf_iterator>): Instantiate. >>>> >             * src/c++11/locale-inst.cc >>>> [!_GLIBCXX_USE_DUAL_ABI]: Build >>>> > only when configured >>>> >             _GLIBCXX_USE_CXX11_ABI is equal to currently >>>> built abi. >>>> > [!_GLIBCXX_USE_DUAL_ABI](__moneypunct_cache): >>>> > Instantiate. >>>> > [!_GLIBCXX_USE_DUAL_ABI](__moneypunct_cache): >>>> > Instantiate. >>>> > [!_GLIBCXX_USE_DUAL_ABI](__numpunct_cache): Instantiate. >>>> > [!_GLIBCXX_USE_DUAL_ABI](__timepunct): Instantiate. >>>> > [!_GLIBCXX_USE_DUAL_ABI](__timepunct_cache): Instantiate. >>>> > [!_GLIBCXX_USE_DUAL_ABI](time_put>>> > ostreambuf_iterator>): Instantiate. >>>> > [!_GLIBCXX_USE_DUAL_ABI](time_put_byname>>> > ostreambuf_iterator>): Instantiate. >>>> > [!_GLIBCXX_USE_DUAL_ABI](__ctype_abstract_base): Instantiate. >>>> > [!_GLIBCXX_USE_DUAL_ABI](ctype_byname): Instantiate. >>>> > [!_GLIBCXX_USE_DUAL_ABI](__codecvt_abstract_base>>> > mbstate_t>): Instantiate. >>>> > [!_GLIBCXX_USE_DUAL_ABI](codecvt_byname>>> > mbstate_t>): Instantiate. >>>> > [!_GLIBCXX_USE_DUAL_ABI](codecvt_byname>>> > mbstate_t>): Instantiate. >>>> > [!_GLIBCXX_USE_DUAL_ABI](use_facet>(const locale&)): >>>> > Instantiate. >>>> > [!_GLIBCXX_USE_DUAL_ABI](use_facet>>> > mbstate_t>>(const locale&)): Instantiate. >>>> > [!_GLIBCXX_USE_DUAL_ABI](use_facet<__timepunct>(const >>>> locale&)): >>>> > Instantiate. >>>> > [!_GLIBCXX_USE_DUAL_ABI](use_facet>(const locale&)): >>>> > Instantiate. >>>> > [!_GLIBCXX_USE_DUAL_ABI](has_facet>(const locale&)): >>>> > Instantiate. >>>> > [!_GLIBCXX_USE_DUAL_ABI](has_facet>>> > mbstate_t>>(const locale&)): Instantiate. >>>> > [!_GLIBCXX_USE_DUAL_ABI](has_facet<__timepunct>(const >>>> locale&)): >>>> > Instantiate. >>>> > [!_GLIBCXX_USE_DUAL_ABI](has_facet>(const locale&)): >>>> > Instantiate. >>>> > [!_GLIBCXX_USE_DUAL_ABI](__add_grouping): Define. >>>> > [!_GLIBCXX_USE_DUAL_ABI](__pad>): >>>> > Instantiate. >>>> > [!_GLIBCXX_USE_DUAL_ABI](__int_to_char(C*, unsigned long, >>>> > const C*, >>>> >             ios_base::fmtflags, bool)): Define. >>>> > [!_GLIBCXX_USE_DUAL_ABI](__int_to_char(C*, unsigned long >>>> > long, const C*, >>>> >             ios_base::fmtflags, bool)): Define. >>>> >             * src/c++11/string-inst.cc >>>> > (_GLIBCXX_DEFINING_CXX11_ABI_INSTANTIATIONS): Define following >>>> >             _GLIBCXX_USE_CXX11_ABI value. >>>> >             [_GLIBCXX_USE_CXX11_ABI && >>>> > !_GLIBCXX_DEFINING_CXX11_ABI_INSTANTIATIONS]: >>>> >             Define _GLIBCXX_DEFINING_COW_STRING_INSTANTIATIONS. >>>> > Include . >>>> >             Define basic_string as __std_cow_string for the >>>> current >>>> > translation unit. >>>> >             * src/c++11/wlocale-inst.cc >>>> [!_GLIBCXX_USE_CXX11_ABI]: >>>> > Skip definitions. >>>> >             * src/c++98/Makefile.am (cxx11_abi_sources): Remove, >>>> > unique cow-istream-string.cc entry >>>> >             move to... >>>> >             (inst_sources): ...this. >>>> >             * src/c++98/Makefile.in: Regenerate. >>>> >             * src/c++98/cow-istream-string.cc: Include >>>> > . >>>> >             [_GLIBCXX_USE_CXX11_ABI]: Skip definitions. >>>> >             * src/c++98/hash_tr1.cc [_GLIBCXX_USE_CXX11_ABI]: >>>> Skip >>>> > definitions. >>>> >             * src/c++98/ios_failure.cc >>>> > [_GLIBCXX_USE_CXX11_ABI][_GLIBCXX_USE_DUAL_ABI]: Skip >>>> definitions. >>>> >             * src/c++98/istream-string.cc >>>> [!_GLIBCXX_USE_DUAL_ABI]: >>>> > Build only when configured >>>> >             _GLIBCXX_USE_CXX11_ABI is equal to currently >>>> built abi. >>>> >             * src/c++98/locale_facets.cc >>>> > [_GLIBCXX_USE_CXX11_ABI](__verify_grouping): Remove. >>>> >             * src/c++98/stdexcept.cc >>>> > [_GLIBCXX_USE_CXX11_ABI](logic_error(const string&): Remove. >>>> > [_GLIBCXX_USE_CXX11_ABI](domain_error(const string&): Remove. >>>> > [_GLIBCXX_USE_CXX11_ABI](invalid_argument(const string&): >>>> > Remove. >>>> > [_GLIBCXX_USE_CXX11_ABI](length_error(const string&): Remove. >>>> > [_GLIBCXX_USE_CXX11_ABI](out_of_range(const string&): Remove. >>>> > [_GLIBCXX_USE_CXX11_ABI](runtime_error(const string&): >>>> > Remove. >>>> > [_GLIBCXX_USE_CXX11_ABI](range_error(const string&): Remove. >>>> > [_GLIBCXX_USE_CXX11_ABI](overflow_error(const string&): >>>> > Remove. >>>> > [_GLIBCXX_USE_CXX11_ABI](underflow_error(const string&): >>>> > Remove. >>>> > >>>> > Tested under linux x86_64 with following configs: >>>> > >>>> > --enable-symvers=gnu-versioned-namespace >>>> > >>>> > --disable-libstdcxx-dual-abi >>>> > >>>> > Ok to commit ? >>>> > >>>> > François >>>> > >>>> > >>>>