libstdc++: Implement constexpr std::basic_string for C++20
This is only supported for the cxx11 ABI, not for COW strings. libstdc++-v3/ChangeLog: * include/bits/basic_string.h (basic_string, operator""s): Add constexpr for C++20. (basic_string::basic_string(basic_string&&)): Only copy initialized portion of the buffer. (basic_string::basic_string(basic_string&&, const Alloc&)): Likewise. * include/bits/basic_string.tcc (basic_string): Add constexpr for C++20. (basic_string::swap(basic_string&)): Only copy initialized portions of the buffers. (basic_string::_M_replace): Add constexpr implementation that doesn't depend on pointer comparisons. * include/bits/cow_string.h: Adjust comment. * include/ext/type_traits.h (__is_null_pointer): Add constexpr. * include/std/string (erase, erase_if): Add constexpr. * include/std/version (__cpp_lib_constexpr_string): Update value. * testsuite/21_strings/basic_string/cons/char/constexpr.cc: New test. * testsuite/21_strings/basic_string/cons/wchar_t/constexpr.cc: New test. * testsuite/21_strings/basic_string/literals/constexpr.cc: New test. * testsuite/21_strings/basic_string/modifiers/constexpr.cc: New test. * testsuite/21_strings/basic_string/modifiers/swap/char/constexpr.cc: New test. * testsuite/21_strings/basic_string/modifiers/swap/wchar_t/constexpr.cc: New test. * testsuite/21_strings/basic_string/version.cc: New test.
Showing
- libstdc++-v3/include/bits/basic_string.h 252 additions, 22 deletionslibstdc++-v3/include/bits/basic_string.h
- libstdc++-v3/include/bits/basic_string.tcc 61 additions, 8 deletionslibstdc++-v3/include/bits/basic_string.tcc
- libstdc++-v3/include/bits/cow_string.h 1 addition, 1 deletionlibstdc++-v3/include/bits/cow_string.h
- libstdc++-v3/include/ext/type_traits.h 3 additions, 1 deletionlibstdc++-v3/include/ext/type_traits.h
- libstdc++-v3/include/std/string 2 additions, 0 deletionslibstdc++-v3/include/std/string
- libstdc++-v3/include/std/version 5 additions, 1 deletionlibstdc++-v3/include/std/version
- libstdc++-v3/testsuite/21_strings/basic_string/cons/char/constexpr.cc 174 additions, 0 deletions.../testsuite/21_strings/basic_string/cons/char/constexpr.cc
- libstdc++-v3/testsuite/21_strings/basic_string/cons/wchar_t/constexpr.cc 174 additions, 0 deletions...stsuite/21_strings/basic_string/cons/wchar_t/constexpr.cc
- libstdc++-v3/testsuite/21_strings/basic_string/literals/constexpr.cc 22 additions, 0 deletions...3/testsuite/21_strings/basic_string/literals/constexpr.cc
- libstdc++-v3/testsuite/21_strings/basic_string/modifiers/constexpr.cc 52 additions, 0 deletions.../testsuite/21_strings/basic_string/modifiers/constexpr.cc
- libstdc++-v3/testsuite/21_strings/basic_string/modifiers/swap/char/constexpr.cc 49 additions, 0 deletions.../21_strings/basic_string/modifiers/swap/char/constexpr.cc
- libstdc++-v3/testsuite/21_strings/basic_string/modifiers/swap/wchar_t/constexpr.cc 49 additions, 0 deletions..._strings/basic_string/modifiers/swap/wchar_t/constexpr.cc
- libstdc++-v3/testsuite/21_strings/basic_string/version.cc 25 additions, 0 deletionslibstdc++-v3/testsuite/21_strings/basic_string/version.cc
Loading
Please register or sign in to comment