aboutsummaryrefslogtreecommitdiff
path: root/libstdc++-v3
diff options
context:
space:
mode:
authorJonathan Wakely <jwakely@redhat.com>2020-10-14 11:52:26 +0100
committerJonathan Wakely <jwakely@redhat.com>2020-10-14 12:51:40 +0100
commitdc38e255242192303ae463a913c060b426eb06c0 (patch)
tree95ce8fda3e5cbdbbface62ed2bb2af66c0718975 /libstdc++-v3
parent4d2a56a0f7135469587feacef44cf00e08f71d09 (diff)
downloadgcc-dc38e255242192303ae463a913c060b426eb06c0.zip
gcc-dc38e255242192303ae463a913c060b426eb06c0.tar.gz
gcc-dc38e255242192303ae463a913c060b426eb06c0.tar.bz2
libstdc++: Implement LWG 3706 for COW strings
The basic_string deduction guides are defined for the old ABI, but the tests are currently disabled. This is because a single case fails when using the old ABI, which is just because LWG 3706 isn't implemented for the old ABI. That can be done easily, and the tests can be enabled. libstdc++-v3/ChangeLog: * include/bits/basic_string.h [!_GLIBCXX_USE_CXX11_ABI] (basic_string(const _CharT*, const _Alloc&)): Constrain to require an allocator-like type to fix CTAD ambiguity (LWG 3706). * testsuite/21_strings/basic_string/cons/char/deduction.cc: Remove dg-skip-if. * testsuite/21_strings/basic_string/cons/wchar_t/deduction.cc: Likewise.
Diffstat (limited to 'libstdc++-v3')
-rw-r--r--libstdc++-v3/include/bits/basic_string.h7
-rw-r--r--libstdc++-v3/testsuite/21_strings/basic_string/cons/char/deduction.cc1
-rw-r--r--libstdc++-v3/testsuite/21_strings/basic_string/cons/wchar_t/deduction.cc1
3 files changed, 7 insertions, 2 deletions
diff --git a/libstdc++-v3/include/bits/basic_string.h b/libstdc++-v3/include/bits/basic_string.h
index a9fe09f..4b3722b 100644
--- a/libstdc++-v3/include/bits/basic_string.h
+++ b/libstdc++-v3/include/bits/basic_string.h
@@ -3612,12 +3612,19 @@ _GLIBCXX_END_NAMESPACE_CXX11
*/
basic_string(const _CharT* __s, size_type __n,
const _Alloc& __a = _Alloc());
+
/**
* @brief Construct string as copy of a C string.
* @param __s Source C string.
* @param __a Allocator to use (default is default allocator).
*/
+#if __cpp_deduction_guides && ! defined _GLIBCXX_DEFINING_STRING_INSTANTIATIONS
+ // _GLIBCXX_RESOLVE_LIB_DEFECTS
+ // 3076. basic_string CTAD ambiguity
+ template<typename = _RequireAllocator<_Alloc>>
+#endif
basic_string(const _CharT* __s, const _Alloc& __a = _Alloc());
+
/**
* @brief Construct string as multiple characters.
* @param __n Number of characters.
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 6484ed4..d05c4b7 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
@@ -17,7 +17,6 @@
// { dg-options "-std=gnu++17" }
// { dg-do compile { target c++17 } }
-// { dg-xfail-if "COW string missing deduction guides" { ! cxx11-abi } }
#include <string>
#include <testsuite_iterators.h>
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 373b2b2..1773be2 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
@@ -17,7 +17,6 @@
// { dg-options "-std=gnu++17" }
// { dg-do compile { target c++17 } }
-// { dg-xfail-if "COW string missing deduction guides" { ! cxx11-abi } }
#include <string>
#include <testsuite_iterators.h>