Hi Jonathan, > The SSO basic_string has a non-standard insert(iterator, initializer_list) > overload, from a C++0x draft. This adds the correct overload, while also > preserving the old one so that the old symbol is still exported from the > library. > > The COW basic_string doesn't have any of the C++11 changes to the insert > overloads (they all still have non-const iterator parameters and the > ones that should return an iterator still return void). This doesn't > make any change to the COW string. > > PR libstdc++/83328 > * acinclude.m4 (libtool_VERSION): Bump to 6:26:0. > * config/abi/pre/gnu.ver: Add GLIBCXX_3.4.26 and export new symbol. > * configure: Regenerate. > * include/bits/basic_string.h [_GLIBCXX_USE_CXX11_ABI] > (basic_string::insert(const_iterator, initializer_list<C>)): Add. > [_GLIBCXX_USE_CXX11_ABI && !_GLIBCXX_DEFINING_STRING_INSTANTIATIONS] > (basic_string::insert(iterator, initializer_list<C>)): Suppress > definition. > * include/debug/string (basic_string::insert(iterator, C)): Change > first parameter to const_iterator. > (basic_string::insert(iterator, size_type, C)): Likewise. Change > return type to iterator. > (basic_string::insert(iterator, InputIterator, InputIterator)): > Likewise. > (basic_string::insert(iterator, initializer_list<C>)): Change first > parameter to const_iterator and return type to iterator. > * src/c++11/string-inst.cc: Extend comment. > * testsuite/21_strings/basic_string/modifiers/insert/char/83328.cc: > New. > * testsuite/21_strings/basic_string/modifiers/insert/wchar_t/83328.cc: > New. > * testsuite/util/testsuite_abi.cc: Add new symbol version. > > Tested x86_64-linux, committed to trunk.
it seems a couple of pattners are a bit too tight now in gnu.ver: this caused a couple of failures on 32-bit Solaris and subsequent tests failing to link due to symbols now hidden: +FAIL: libstdc++-abi/abi_check # of added symbols: 3 # of missing symbols: 12 # of undesignated symbols: 0 # of incompatible symbols: 12 3 added symbols 0 _ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE6insertEN9__gnu_cxx17__normal_iteratorIPKcS4_EESt16initializer_listIcE std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::insert(__gnu_cxx::__normal_iterator<char const*, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::initializer_list<char>) version status: compatible GLIBCXX_3.4.26 type: function status: added 1 _ZNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEE6insertEN9__gnu_cxx17__normal_iteratorIPKwS4_EESt16initializer_listIwE std::__cxx11::basic_string<wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t> >::insert(__gnu_cxx::__normal_iterator<wchar_t const*, std::__cxx11::basic_string<wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t> > >, std::initializer_list<wchar_t>) version status: compatible GLIBCXX_3.4.26 type: function status: added 2 GLIBCXX_3.4.26 version status: compatible type: object type size: 0 status: added 12 missing symbols 0 _ZNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEE6insertEjRKS4_jj std::__cxx11::basic_string<wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t> >::insert(unsigned int, std::__cxx11::basic_string<wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t> > const&, unsigned int, unsigned int) version status: unversioned type: function status: subtracted 1 _ZNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEE6insertEjPKwj std::__cxx11::basic_string<wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t> >::insert(unsigned int, wchar_t const*, unsigned int) version status: unversioned type: function status: subtracted 2 _ZNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEE6insertEjPKw std::__cxx11::basic_string<wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t> >::insert(unsigned int, wchar_t const*) version status: unversioned type: function status: subtracted 3 _ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE6insertEN9__gnu_cxx17__normal_iteratorIPKcS4_EEjc std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::insert(__gnu_cxx::__normal_iterator<char const*, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, unsigned int, char) version status: unversioned type: function status: subtracted 4 _ZNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEE6insertEjjw std::__cxx11::basic_string<wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t> >::insert(unsigned int, unsigned int, wchar_t) version status: unversioned type: function status: subtracted 5 _ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE6insertEjPKcj std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::insert(unsigned int, char const*, unsigned int) version status: unversioned type: function status: subtracted 6 _ZNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEE6insertEN9__gnu_cxx17__normal_iteratorIPKwS4_EEjw std::__cxx11::basic_string<wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t> >::insert(__gnu_cxx::__normal_iterator<wchar_t const*, std::__cxx11::basic_string<wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t> > >, unsigned int, wchar_t) version status: unversioned type: function status: subtracted 7 _ZNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEE6insertEjRKS4_ std::__cxx11::basic_string<wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t> >::insert(unsigned int, std::__cxx11::basic_string<wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t> > const&) version status: unversioned type: function status: subtracted 8 _ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE6insertEjRKS4_ std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::insert(unsigned int, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) version status: unversioned type: function status: subtracted 9 _ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE6insertEjPKc std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::insert(unsigned int, char const*) version status: unversioned type: function status: subtracted 10 _ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE6insertEjRKS4_jj std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::insert(unsigned int, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, unsigned int, unsigned int) version status: unversioned type: function status: subtracted 11 _ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE6insertEjjc std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::insert(unsigned int, unsigned int, char) version status: unversioned type: function status: subtracted 12 incompatible symbols 0 _ZNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEE6insertEjRKS4_jj std::__cxx11::basic_string<wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t> >::insert(unsigned int, std::__cxx11::basic_string<wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t> > const&, unsigned int, unsigned int) version status: unversioned type: function status: subtracted 1 _ZNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEE6insertEjPKwj std::__cxx11::basic_string<wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t> >::insert(unsigned int, wchar_t const*, unsigned int) version status: unversioned type: function status: subtracted 2 _ZNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEE6insertEjPKw std::__cxx11::basic_string<wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t> >::insert(unsigned int, wchar_t const*) version status: unversioned type: function status: subtracted 3 _ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE6insertEN9__gnu_cxx17__normal_iteratorIPKcS4_EEjc std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::insert(__gnu_cxx::__normal_iterator<char const*, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, unsigned int, char) version status: unversioned type: function status: subtracted 4 _ZNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEE6insertEjjw std::__cxx11::basic_string<wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t> >::insert(unsigned int, unsigned int, wchar_t) version status: unversioned type: function status: subtracted 5 _ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE6insertEjPKcj std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::insert(unsigned int, char const*, unsigned int) version status: unversioned type: function status: subtracted 6 _ZNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEE6insertEN9__gnu_cxx17__normal_iteratorIPKwS4_EEjw std::__cxx11::basic_string<wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t> >::insert(__gnu_cxx::__normal_iterator<wchar_t const*, std::__cxx11::basic_string<wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t> > >, unsigned int, wchar_t) version status: unversioned type: function status: subtracted 7 _ZNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEE6insertEjRKS4_ std::__cxx11::basic_string<wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t> >::insert(unsigned int, std::__cxx11::basic_string<wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t> > const&) version status: unversioned type: function status: subtracted 8 _ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE6insertEjRKS4_ std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::insert(unsigned int, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) version status: unversioned type: function status: subtracted 9 _ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE6insertEjPKc std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::insert(unsigned int, char const*) version status: unversioned type: function status: subtracted 10 _ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE6insertEjRKS4_jj std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::insert(unsigned int, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, unsigned int, unsigned int) version status: unversioned type: function status: subtracted 11 _ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE6insertEjjc std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::insert(unsigned int, unsigned int, char) version status: unversioned type: function status: subtracted and e.g. +FAIL: ext/pb_ds/regression/tree_map_rand.cc (test for excess errors) +UNRESOLVED: ext/pb_ds/regression/tree_map_rand.cc compilation failed to produce executable Excess errors: Undefined first referenced symbol in file std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::insert(unsigned int, char const*) /var/tmp//cc7IwcEd.o Rainer -- ----------------------------------------------------------------------------- Rainer Orth, Center for Biotechnology, Bielefeld University