@@ -1413,24 +1413,16 @@ public:
1413
1413
_LIBCPP_CONSTEXPR_SINCE_CXX20 basic_string& append (const value_type* _LIBCPP_DIAGNOSE_NULLPTR __s);
1414
1414
_LIBCPP_CONSTEXPR_SINCE_CXX20 basic_string& append (size_type __n, value_type __c);
1415
1415
1416
- template <class _InputIterator , __enable_if_t <__has_exactly_input_iterator_category<_InputIterator>::value, int > = 0 >
1417
- _LIBCPP_HIDE_FROM_ABI _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20 basic_string&
1418
- append (_InputIterator __first, _InputIterator __last) {
1419
- const basic_string __temp (__first, __last, __alloc_);
1420
- append (__temp.data (), __temp.size ());
1421
- return *this ;
1422
- }
1423
-
1424
- template <class _ForwardIterator , __enable_if_t <__has_forward_iterator_category<_ForwardIterator>::value, int > = 0 >
1416
+ template <class _InputIterator >
1425
1417
_LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20 basic_string&
1426
- append (_ForwardIterator __first, _ForwardIterator __last) {
1418
+ append (_InputIterator __first, _InputIterator __last) {
1427
1419
size_type __sz = size ();
1428
1420
size_type __cap = capacity ();
1429
1421
size_type __n = static_cast <size_type>(std::distance (__first, __last));
1430
1422
if (__n == 0 )
1431
1423
return *this ;
1432
1424
1433
- if (__string_is_trivial_iterator_v<_ForwardIterator > && !__addr_in_range (*__first)) {
1425
+ if (__string_is_trivial_iterator_v<_InputIterator > && !__addr_in_range (*__first)) {
1434
1426
if (__cap - __sz < __n)
1435
1427
__grow_by_without_replace (__cap, __sz + __n - __cap, __sz, __sz, 0 );
1436
1428
__annotate_increase (__n);
@@ -1540,17 +1532,10 @@ public:
1540
1532
_LIBCPP_CONSTEXPR_SINCE_CXX20 basic_string& assign (const value_type* _LIBCPP_DIAGNOSE_NULLPTR __s);
1541
1533
_LIBCPP_CONSTEXPR_SINCE_CXX20 basic_string& assign (size_type __n, value_type __c);
1542
1534
1543
- template <class _InputIterator , __enable_if_t <__has_exactly_input_iterator_category<_InputIterator>::value, int > = 0 >
1535
+ template <class _InputIterator >
1544
1536
_LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20 basic_string&
1545
1537
assign (_InputIterator __first, _InputIterator __last) {
1546
- __assign_with_sentinel (__first, __last);
1547
- return *this ;
1548
- }
1549
-
1550
- template <class _ForwardIterator , __enable_if_t <__has_forward_iterator_category<_ForwardIterator>::value, int > = 0 >
1551
- _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20 basic_string&
1552
- assign (_ForwardIterator __first, _ForwardIterator __last) {
1553
- if (__string_is_trivial_iterator_v<_ForwardIterator>) {
1538
+ if _LIBCPP_CONSTEXPR (__string_is_trivial_iterator_v<_InputIterator>) {
1554
1539
size_type __n = static_cast <size_type>(std::distance (__first, __last));
1555
1540
__assign_trivial (__first, __last, __n);
1556
1541
} else {
@@ -1563,8 +1548,7 @@ public:
1563
1548
# if _LIBCPP_STD_VER >= 23
1564
1549
template <_ContainerCompatibleRange<_CharT> _Range>
1565
1550
_LIBCPP_HIDE_FROM_ABI constexpr basic_string& assign_range (_Range&& __range) {
1566
- if constexpr (__string_is_trivial_iterator_v<ranges::iterator_t <_Range>> &&
1567
- (ranges::forward_range<_Range> || ranges::sized_range<_Range>)) {
1551
+ if constexpr (__string_is_trivial_iterator_v<ranges::iterator_t <_Range>>) {
1568
1552
size_type __n = static_cast <size_type>(ranges::distance (__range));
1569
1553
__assign_trivial (ranges::begin (__range), ranges::end (__range), __n);
1570
1554
0 commit comments