This is the mail archive of the libstdc++@gcc.gnu.org mailing list for the libstdc++ project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [PATCH] Export explicit instantiations for C++17 members of std::string


On 06/01/19 17:59 +0100, Rainer Orth wrote:
Hi Jonathan,

The C++17 standard added some new members to std::basic_string, which
were not previously instantiated in the library. This meant that the
extern template declarations had to be disabled for C++17 mode. With
this patch the new members are instantiated in the library and so the
explicit instantiation declarations can be used for C++17.

The new members added by C++2a are still not exported, and so the
explicit instantiation declarations are still disabled for C++2a.

	* config/abi/pre/gnu.ver (GLIBCXX_3.4.21): Make patterns less greedy
	for const member functions of std::basic_string.
	(GLIBCXX_3.4.26): Export member functions of std::basic_string added
	in C++17.
	* include/bits/basic_string.h (basic_string(__sv_wrapper, const A&)):
	Make non-standard constructor private.
	[!_GLIBCXX_USE_CXX11_ABI] (basic_string(__sv_wrapper, const A&)):
	Likewise.
	* include/bits/basic_string.tcc (std::string, std::wstring): Declare
	explicit instantiations for C++17 as well as earlier dialects.
	* src/c++17/Makefile.am: Add new source files.
	* src/c++17/Makefile.in: Regenerate.
	* src/c++17/cow-string-inst.cc: New file defining explicit
	instantiations for basic_string member functions added in C++17.
	* src/c++17/string-inst.cc: Likewise.

Tested powerpc64le-linux, committed to trunk.

this patch broke Solaris bootstrap:

ld: fatal: libstdc++-symbols.ver-sun: 6705: symbol 'std::basic_string<char, std::char_traits<char>, std::allocator<char> >::operator std::basic_string_view<char, std::char_traits<char> >() const': symbol version conflict
ld: fatal: libstdc++-symbols.ver-sun: 6707: symbol 'std::basic_string<wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t> >::operator std::basic_string_view<wchar_t, std::char_traits<wchar_t> >() const': symbol version conflict
ld: fatal: libstdc++-symbols.ver-sun: 6712: symbol 'std::basic_string<char, std::char_traits<char>, std::allocator<char> >::data()': symbol version conflict
ld: fatal: libstdc++-symbols.ver-sun: 6714: symbol 'std::basic_string<wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t> >::data()': symbol version conflict
ld: fatal: libstdc++-symbols.ver-sun: 6723: symbol 'std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::_S_to_string_view(std::basic_string_view<char, std::char_traits<char> >)': symbol version conflict
ld: fatal: libstdc++-symbols.ver-sun: 6724: symbol 'std::__cxx11::basic_string<wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t> >::_S_to_string_view(std::basic_string_view<wchar_t, std::char_traits<wchar_t> >)': symbol version conflict
collect2: error: ld returned 1 exit status
make[6]: *** [Makefile:696: libstdc++.la] Error 1

Sorry :-(

[...]

The following patch allowed the build to finish.

OK for trunk, thanks.

I'll make sure to run my script to check for such conflicts before
adding any more symbols.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]