diff options
author | Jonathan Wakely <jwakely@redhat.com> | 2019-01-04 23:23:22 +0000 |
---|---|---|
committer | Jonathan Wakely <redi@gcc.gnu.org> | 2019-01-04 23:23:22 +0000 |
commit | 1a289fa36294627c252492e4c18d7877a7c80dc1 (patch) | |
tree | f72c48461f5498b0faba69361a2a52347cb032dd /libstdc++-v3/config | |
parent | 4ff3e6509066e2832fdfe9987e7fd2f8719da93f (diff) | |
download | gcc-1a289fa36294627c252492e4c18d7877a7c80dc1.zip gcc-1a289fa36294627c252492e4c18d7877a7c80dc1.tar.gz gcc-1a289fa36294627c252492e4c18d7877a7c80dc1.tar.bz2 |
Export explicit instantiations for C++17 members of std::string
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.
From-SVN: r267585
Diffstat (limited to 'libstdc++-v3/config')
-rw-r--r-- | libstdc++-v3/config/abi/pre/gnu.ver | 24 |
1 files changed, 23 insertions, 1 deletions
diff --git a/libstdc++-v3/config/abi/pre/gnu.ver b/libstdc++-v3/config/abi/pre/gnu.ver index 1d15728..6c18caa 100644 --- a/libstdc++-v3/config/abi/pre/gnu.ver +++ b/libstdc++-v3/config/abi/pre/gnu.ver @@ -1742,7 +1742,8 @@ GLIBCXX_3.4.21 { _ZNSt7__cxx1112basic_stringI[cw]St11char_traitsI[cw]ESaI[cw]EEC[12]Ev; _ZNSt7__cxx1112basic_stringI[cw]St11char_traitsI[cw]ESaI[cw]EEC[12]I[PN]*; _ZNSt7__cxx1112basic_stringI[cw]St11char_traitsI[cw]ESaI[cw]EE[Daip]*; - _ZNKSt7__cxx1112basic_string*; + _ZNKSt7__cxx1112basic_stringI[cw]St11char_traitsI[cw]ESaI[cw]EE[1-9]*; + _ZNKSt7__cxx1112basic_stringI[cw]St11char_traitsI[cw]ESaI[cw]EEixE[jmy]; # operator+ for ABI-tagged std::basic_string _ZStplI[cw]St11char_traitsI[cw]ESaI[cw]EENSt7__cxx1112basic_stringIT_T0_T1_EE*; @@ -2077,6 +2078,27 @@ GLIBCXX_3.4.26 { _ZNSbIwSt11char_traitsIwESaIwEEC[12]ERKS2_RKS1_; _ZNSbIwSt11char_traitsIwESaIwEEC[12]EOS2_RKS1_; + # basic_string<C, T, A>::operator basic_string_view<C, T>() const + _ZNKSscvSt17basic_string_viewIcSt11char_traitsIcEEEv; + _ZNKSbIwSt11char_traitsIwESaIwEEcvSt17basic_string_viewIwS0_EEv; + _ZNKSt7__cxx1112basic_stringI[cw]St11char_traitsI[cw]ESaI[cw]EEcvSt17basic_string_viewI[cw]S2_EEv; + # basic_string<C, T, A>::data() + _ZNSs4dataEv; + _ZNSbIwSt11char_traitsIwESaIwEE4dataEv; + _ZNSt7__cxx1112basic_stringI[cw]St11char_traitsI[cw]ESaI[cw]EE4dataEv; + # basic_string<C, T, A>::_S_to_string_view(basic_string_view<C, T>) + _ZNSs17_S_to_string_viewESt17basic_string_viewIcSt11char_traitsIcEE; + _ZNSbIwSt11char_traitsIwESaIwEE17_S_to_string_viewESt17basic_string_viewIwS0_E; + _ZNSt7__cxx1112basic_stringI[cw]St11char_traitsI[cw]ESaI[cw]EE17_S_to_string_viewESt17basic_string_viewI[cw]S2_E; + # basic_string<C, T, A>::__sv_wrapper::__sv_wrapper(basic_string_view<C, T>) + _ZNSs12__sv_wrapperC[12]ESt17basic_string_viewIcSt11char_traitsIcEE; + _ZNSbIwSt11char_traitsIwESaIwEE12__sv_wrapperC[12]ESt17basic_string_viewIwS0_E; + _ZNSt7__cxx1112basic_stringI[cw]St11char_traitsI[cw]ESaI[cw]EE12__sv_wrapperC[12]ESt17basic_string_viewI[cw]S2_E; + # basic_string<C, T, A>::basic_string(__sv_wrapper, const allocator_type&) + _ZNSsC[12]ENSs12__sv_wrapperERKSaIcE; + _ZNSbIwSt11char_traitsIwESaIwEEC[12]ENS2_12__sv_wrapperERKS1_; + _ZNSt7__cxx1112basic_stringI[cw]St11char_traitsI[cw]ESaI[cw]EEC[12]ENS4_12__sv_wrapperERKS3_; + } GLIBCXX_3.4.25; # Symbols in the support library (libsupc++) have their own tag. |