aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJonathan Wakely <jwakely@redhat.com>2018-06-14 21:27:04 +0100
committerJonathan Wakely <redi@gcc.gnu.org>2018-06-14 21:27:04 +0100
commit53e926c8cd54a9f1b5817c8e4b50c87aacce432b (patch)
tree53a4ef795a46582e7843b840f5c532881388cd50
parentdb5ab3aa920cee83ecda219f0faa1e35ed1e3864 (diff)
downloadgcc-53e926c8cd54a9f1b5817c8e4b50c87aacce432b.zip
gcc-53e926c8cd54a9f1b5817c8e4b50c87aacce432b.tar.gz
gcc-53e926c8cd54a9f1b5817c8e4b50c87aacce432b.tar.bz2
LWG 3075 basic_string needs deduction guides from basic_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. From-SVN: r261612
-rw-r--r--libstdc++-v3/ChangeLog6
-rw-r--r--libstdc++-v3/include/bits/basic_string.h17
-rw-r--r--libstdc++-v3/testsuite/21_strings/basic_string/cons/char/deduction.cc20
-rw-r--r--libstdc++-v3/testsuite/21_strings/basic_string/cons/wchar_t/deduction.cc20
4 files changed, 63 insertions, 0 deletions
diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog
index 6db3622..e368044 100644
--- a/libstdc++-v3/ChangeLog
+++ b/libstdc++-v3/ChangeLog
@@ -1,5 +1,11 @@
2018-06-14 Jonathan Wakely <jwakely@redhat.com>
+ LWG 3075 basic_string needs deduction guides from basic_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.
+
LWG 3074 make scalar types non-deduced in valarray non-member functions
* include/bits/valarray_after.h (_DEFINE_EXPR_BINARY_FUNCTION): Change
scalar parameters to be a non-deduced context.
diff --git a/libstdc++-v3/include/bits/basic_string.h b/libstdc++-v3/include/bits/basic_string.h
index 5bffa1c..fbac38a 100644
--- a/libstdc++-v3/include/bits/basic_string.h
+++ b/libstdc++-v3/include/bits/basic_string.h
@@ -5873,6 +5873,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 f7dee1e..cf6857c 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 7fe367b..ea312ff 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);
+}