diff options
author | redi <redi@138bc75d-0d04-0410-961f-82ee72b054a4> | 2018-07-04 11:44:29 +0000 |
---|---|---|
committer | redi <redi@138bc75d-0d04-0410-961f-82ee72b054a4> | 2018-07-04 11:44:29 +0000 |
commit | a6d13e084f73f7c65fd113febff71cb2ed260035 (patch) | |
tree | 7dc298e0bbb51e9aaf8669b82f3e432b026cdcc1 | |
parent | bd5a9db5ab345336ad1ce312f074ea5644c51760 (diff) |
LWG 3075 basic_string needs deduction guides from basic_string_view
Backport from mainline
2018-06-14 Jonathan Wakely <jwakely@redhat.com>
* include/bits/basic_string.h: Add deduction guides from string_view.
* testsuite/21_strings/basic_string/cons/char/deduction.cc: Test
deduction from string views.
* testsuite/21_strings/basic_string/cons/wchar_t/deduction.cc:
Likewise.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/gcc-8-branch@262383 138bc75d-0d04-0410-961f-82ee72b054a4
-rw-r--r-- | libstdc++-v3/ChangeLog | 10 | ||||
-rw-r--r-- | libstdc++-v3/include/bits/basic_string.h | 17 | ||||
-rw-r--r-- | libstdc++-v3/testsuite/21_strings/basic_string/cons/char/deduction.cc | 20 | ||||
-rw-r--r-- | libstdc++-v3/testsuite/21_strings/basic_string/cons/wchar_t/deduction.cc | 20 |
4 files changed, 67 insertions, 0 deletions
diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog index e8ff228c4808..b5815c6f53ff 100644 --- a/libstdc++-v3/ChangeLog +++ b/libstdc++-v3/ChangeLog @@ -1,6 +1,16 @@ 2018-07-04 Jonathan Wakely <jwakely@redhat.com> Backport from mainline + 2018-06-14 Jonathan Wakely <jwakely@redhat.com> + + LWG 3075 basic_string needs deduction guides from basic_string_view + * include/bits/basic_string.h: Add deduction guides from string_view. + * testsuite/21_strings/basic_string/cons/char/deduction.cc: Test + deduction from string views. + * testsuite/21_strings/basic_string/cons/wchar_t/deduction.cc: + Likewise. + + Backport from mainline 2018-05-03 Jonathan Wakely <jwakely@redhat.com> PR libstdc++/84087 LWG DR 2268 basic_string default arguments diff --git a/libstdc++-v3/include/bits/basic_string.h b/libstdc++-v3/include/bits/basic_string.h index d37e93427eae..577ad5e2f712 100644 --- a/libstdc++-v3/include/bits/basic_string.h +++ b/libstdc++-v3/include/bits/basic_string.h @@ -5876,6 +5876,23 @@ _GLIBCXX_BEGIN_NAMESPACE_CXX11 typename = _RequireAllocator<_Allocator>> basic_string(_InputIterator, _InputIterator, _Allocator = _Allocator()) -> basic_string<_CharT, char_traits<_CharT>, _Allocator>; + + // _GLIBCXX_RESOLVE_LIB_DEFECTS + // 3075. basic_string needs deduction guides from basic_string_view + template<typename _CharT, typename _Traits, + typename _Allocator = allocator<_CharT>, + typename = _RequireAllocator<_Allocator>> + basic_string(basic_string_view<_CharT, _Traits>, const _Allocator& = _Allocator()) + -> basic_string<_CharT, _Traits, _Allocator>; + + template<typename _CharT, typename _Traits, + typename _Allocator = allocator<_CharT>, + typename = _RequireAllocator<_Allocator>> + basic_string(basic_string_view<_CharT, _Traits>, + typename basic_string<_CharT, _Traits, _Allocator>::size_type, + typename basic_string<_CharT, _Traits, _Allocator>::size_type, + const _Allocator& = _Allocator()) + -> basic_string<_CharT, _Traits, _Allocator>; _GLIBCXX_END_NAMESPACE_CXX11 #endif diff --git a/libstdc++-v3/testsuite/21_strings/basic_string/cons/char/deduction.cc b/libstdc++-v3/testsuite/21_strings/basic_string/cons/char/deduction.cc index f7dee1e61417..cf6857c6678d 100644 --- a/libstdc++-v3/testsuite/21_strings/basic_string/cons/char/deduction.cc +++ b/libstdc++-v3/testsuite/21_strings/basic_string/cons/char/deduction.cc @@ -118,3 +118,23 @@ test04() std::basic_string s4((char32_t)1, U'a', std::allocator<char32_t>()); check_type<std::u32string>(s4); } + +void +test05() +{ + // LWG 3075 basic_string needs deduction guides from basic_string_view + std::string_view sv{"A View to a Kill"}; + const std::allocator<char> a; + + std::basic_string s1(sv); + check_type<std::string>(s1); + + std::basic_string s2(sv, a); + check_type<std::string>(s2); + + std::basic_string s3(sv, 2u, 6u); + check_type<std::string>(s3); + + std::basic_string s4(sv, 2u, 6u, a); + check_type<std::string>(s4); +} diff --git a/libstdc++-v3/testsuite/21_strings/basic_string/cons/wchar_t/deduction.cc b/libstdc++-v3/testsuite/21_strings/basic_string/cons/wchar_t/deduction.cc index 7fe367b56dd5..ea312ff653eb 100644 --- a/libstdc++-v3/testsuite/21_strings/basic_string/cons/wchar_t/deduction.cc +++ b/libstdc++-v3/testsuite/21_strings/basic_string/cons/wchar_t/deduction.cc @@ -77,3 +77,23 @@ test02() std::basic_string s4((wchar_t)1, L'a', std::allocator<wchar_t>()); check_type<std::wstring>(s4); } + +void +test05() +{ + // LWG 3075 basic_string needs deduction guides from basic_string_view + std::wstring_view sv{L"A View to a Kill"}; + const std::allocator<wchar_t> a; + + std::basic_string s1(sv); + check_type<std::wstring>(s1); + + std::basic_string s2(sv, a); + check_type<std::wstring>(s2); + + std::basic_string s3(sv, 2u, 6u); + check_type<std::wstring>(s3); + + std::basic_string s4(sv, 2u, 6u, a); + check_type<std::wstring>(s4); +} |