@@ -1413,24 +1413,16 @@ public:
14131413 _LIBCPP_CONSTEXPR_SINCE_CXX20 basic_string& append (const value_type* _LIBCPP_DIAGNOSE_NULLPTR __s);
14141414 _LIBCPP_CONSTEXPR_SINCE_CXX20 basic_string& append (size_type __n, value_type __c);
14151415
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 >
14251417 _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20 basic_string&
1426- append (_ForwardIterator __first, _ForwardIterator __last) {
1418+ append (_InputIterator __first, _InputIterator __last) {
14271419 size_type __sz = size ();
14281420 size_type __cap = capacity ();
14291421 size_type __n = static_cast <size_type>(std::distance (__first, __last));
14301422 if (__n == 0 )
14311423 return *this ;
14321424
1433- if (__string_is_trivial_iterator_v<_ForwardIterator > && !__addr_in_range (*__first)) {
1425+ if (__string_is_trivial_iterator_v<_InputIterator > && !__addr_in_range (*__first)) {
14341426 if (__cap - __sz < __n)
14351427 __grow_by_without_replace (__cap, __sz + __n - __cap, __sz, __sz, 0 );
14361428 __annotate_increase (__n);
@@ -1540,17 +1532,10 @@ public:
15401532 _LIBCPP_CONSTEXPR_SINCE_CXX20 basic_string& assign (const value_type* _LIBCPP_DIAGNOSE_NULLPTR __s);
15411533 _LIBCPP_CONSTEXPR_SINCE_CXX20 basic_string& assign (size_type __n, value_type __c);
15421534
1543- template <class _InputIterator , __enable_if_t <__has_exactly_input_iterator_category<_InputIterator>::value, int > = 0 >
1535+ template <class _InputIterator >
15441536 _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20 basic_string&
15451537 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>) {
15541539 size_type __n = static_cast <size_type>(std::distance (__first, __last));
15551540 __assign_trivial (__first, __last, __n);
15561541 } else {
@@ -1563,8 +1548,7 @@ public:
15631548# if _LIBCPP_STD_VER >= 23
15641549 template <_ContainerCompatibleRange<_CharT> _Range>
15651550 _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>>) {
15681552 size_type __n = static_cast <size_type>(ranges::distance (__range));
15691553 __assign_trivial (ranges::begin (__range), ranges::end (__range), __n);
15701554
0 commit comments