PR libstdc++/79162 implement LWG 2946 and LWG 2758
commit7c78f2e67270187dd755632eafe3a526f4e6df30
authorredi <redi@138bc75d-0d04-0410-961f-82ee72b054a4>
Mon, 4 Sep 2017 15:48:47 +0000 (4 15:48 +0000)
committerredi <redi@138bc75d-0d04-0410-961f-82ee72b054a4>
Mon, 4 Sep 2017 15:48:47 +0000 (4 15:48 +0000)
treef9e27687bc1d62ee185bcfacc0f8b7c21f0a90fc
parent0d84c6e50686ba2141ee7ce9f249ed93782608a9
PR libstdc++/79162 implement LWG 2946 and LWG 2758

2017-09-04  Daniel Kruegler  <daniel.kruegler@gmail.com>

PR libstdc++/79162
Implement LWG 2946, LWG 2758's resolution missed further corrections
* include/bits/basic_string.h (basic_string::compare): Add missing
required noexcept specifications.
(basic_string): Introduce internal _S_to_string_view and __sv_wrapper
for implicit string_view conversion.
(basic_string::basic_string): Fix explicit string_view conversion by
implicit conversion using _S_to_string_view and __sv_wrapper.
(basic_string): Introduce internal basic_string(__sv_wrapper, Alloc)
constructor.
(basic_string): Fix operator=(T) template by operator=(const T&)
template for uncopyable types (PR 79162).
(basic_string::operator+=, basic_string::append, basic_string::assign)
(basic_string::insert, basic_string::replace, basic_string::find)
(basic_string::rfind, basic_string::find_first_of)
(basic_string::find_last_of, basic_string::find_first_not_of)
(basic_string::find_last_not_of, basic_string::compare): Replace
__sv_type argument by template const T& (LWG 2946) and correct
documentation describing __sv_type argument.
(basic_string::find, basic_string::rfind, basic_string::find_first_of)
(basic_string::find_last_of, basic_string::find_first_not_of)
(basic_string::find_last_not_of, basic_string::compare): Replace
unconditional noexcept specification by conditional noexcept
specification to partially balance the removal of noexcept by LWG 2946.
* testsuite/21_strings/basic_string/79162.cc: New.
* testsuite/21_strings/basic_string/lwg2946.cc: New.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@251664 138bc75d-0d04-0410-961f-82ee72b054a4
libstdc++-v3/ChangeLog
libstdc++-v3/include/bits/basic_string.h
libstdc++-v3/testsuite/21_strings/basic_string/79162.cc [new file with mode: 0644]
libstdc++-v3/testsuite/21_strings/basic_string/lwg2946.cc [new file with mode: 0644]