Skip to content

Commit 48f48c2

Browse files
committed
CRs
1 parent 5eea6a7 commit 48f48c2

File tree

1 file changed

+62
-78
lines changed

1 file changed

+62
-78
lines changed

stl/inc/xutility

Lines changed: 62 additions & 78 deletions
Original file line numberDiff line numberDiff line change
@@ -162,6 +162,14 @@ _NODISCARD _CONSTEXPR_BIT_CAST _To _Bit_cast(const _From& _Val) noexcept {
162162
#endif // ^^^ no workaround ^^^
163163
}
164164

165+
template <class _Ty>
166+
_NODISCARD _Ty _Fake_decay_copy(_Ty) noexcept;
167+
// _Fake_decay_copy<T>(E):
168+
// (1) has type T [decay_t<decltype((E))> if T is deduced],
169+
// (2) is well-formed if and only if E is implicitly convertible to T and T is destructible, and
170+
// (3) is non-throwing if and only if both conversion from decltype((E)) to T and destruction of T are non-throwing.
171+
172+
165173
template <class _Ty>
166174
struct _Get_first_parameter;
167175

@@ -1204,15 +1212,12 @@ _NODISCARD _CONSTEXPR17 _BidIt prev(_BidIt _First, _Iter_diff_t<_BidIt> _Off = 1
12041212
return _First;
12051213
}
12061214

1207-
template <class _Iter>
1208-
_NODISCARD constexpr _Iter _Operator_arrow(true_type, _Iter _Target) {
1209-
return _Target;
1210-
}
1211-
1212-
template <class _Iter>
1213-
_NODISCARD constexpr decltype(auto) _Operator_arrow(false_type, _Iter& _Target) {
1214-
return _Target.operator->();
1215-
}
1215+
template <class _Iter, class _Pointer, bool = is_pointer_v<_Remove_cvref_t<_Iter>>>
1216+
_INLINE_VAR constexpr bool _Is_nothrow_operator_arrow = noexcept(
1217+
_Implicitly_convert_to<_Pointer>(_STD declval<_Iter>()));
1218+
template <class _Iter, class _Pointer>
1219+
_INLINE_VAR constexpr bool _Is_nothrow_operator_arrow<_Iter, _Pointer, false> = noexcept(
1220+
_Implicitly_convert_to<_Pointer>(_STD declval<_Iter>().operator->()));
12161221

12171222
template <class _BidIt>
12181223
class reverse_iterator {
@@ -1256,7 +1261,7 @@ public:
12561261
&& assignable_from<_BidIt&, const _Other&>
12571262
#endif // __cpp_lib_concepts
12581263
_CONSTEXPR17 reverse_iterator& operator=(const reverse_iterator<_Other>& _Right) noexcept(
1259-
is_nothrow_constructible_v<_BidIt, const _Other&>) /* strengthened */ {
1264+
is_nothrow_assignable_v<_BidIt&, const _Other&>) /* strengthened */ {
12601265
current = _Right.current;
12611266
return *this;
12621267
}
@@ -1275,8 +1280,7 @@ public:
12751280
#ifdef __cpp_lib_concepts
12761281
// clang-format off
12771282
_NODISCARD constexpr pointer operator->() const noexcept(is_nothrow_copy_constructible_v<_BidIt>&& noexcept(
1278-
--(_STD declval<_BidIt&>())) && noexcept(_Implicitly_convert_to<pointer>(_Operator_arrow(is_pointer<_BidIt>{},
1279-
_STD declval<_BidIt&>())))) /* strengthened */
1283+
--(_STD declval<_BidIt&>())) && _Is_nothrow_operator_arrow<const _BidIt&, pointer>) /* strengthened */
12801284
requires (is_pointer_v<_BidIt> || requires(const _BidIt __i) { __i.operator->(); })
12811285
{
12821286
_BidIt _Tmp = current;
@@ -1289,9 +1293,9 @@ public:
12891293
}
12901294
// clang-format on
12911295
#else // ^^^ __cpp_lib_concepts / !__cpp_lib_concepts vvv
1292-
_NODISCARD _CONSTEXPR17 pointer operator->() const noexcept(is_nothrow_copy_constructible_v<_BidIt>&& noexcept(
1293-
--(_STD declval<_BidIt&>())) && noexcept(_Implicitly_convert_to<pointer>(_Operator_arrow(is_pointer<_BidIt>{},
1294-
_STD declval<_BidIt&>())))) /* strengthened */ {
1296+
_NODISCARD _CONSTEXPR17 pointer operator->() const
1297+
noexcept(is_nothrow_copy_constructible_v<_BidIt>&& noexcept(--(_STD declval<_BidIt&>()))
1298+
&& _Is_nothrow_operator_arrow<const _BidIt&, pointer>) /* strengthened */ {
12951299
_BidIt _Tmp = current;
12961300
--_Tmp;
12971301
if constexpr (is_pointer_v<_BidIt>) {
@@ -1327,7 +1331,7 @@ public:
13271331
}
13281332

13291333
_NODISCARD _CONSTEXPR17 reverse_iterator operator+(const difference_type _Off) const
1330-
noexcept(is_nothrow_copy_constructible_v<_BidIt>&& noexcept(current - _Off)) /* strengthened */ {
1334+
noexcept(noexcept(reverse_iterator(current - _Off))) /* strengthened */ {
13311335
return reverse_iterator(current - _Off);
13321336
}
13331337

@@ -1338,7 +1342,7 @@ public:
13381342
}
13391343

13401344
_NODISCARD _CONSTEXPR17 reverse_iterator operator-(const difference_type _Off) const
1341-
noexcept(is_nothrow_copy_constructible_v<_BidIt>&& noexcept(current + _Off)) /* strengthened */ {
1345+
noexcept(noexcept(reverse_iterator(current + _Off))) /* strengthened */ {
13421346
return reverse_iterator(current + _Off);
13431347
}
13441348

@@ -1376,13 +1380,13 @@ public:
13761380
using _Prevent_inheriting_unwrap = reverse_iterator;
13771381

13781382
template <class _BidIt2, enable_if_t<_Range_verifiable_v<_BidIt, _BidIt2>, int> = 0>
1379-
friend constexpr void _Verify_range(const reverse_iterator& _First,
1380-
const reverse_iterator<_BidIt2>& _Last) noexcept(noexcept(_Verify_range(_Last.base(), _First.base()))) {
1383+
friend constexpr void _Verify_range(
1384+
const reverse_iterator& _First, const reverse_iterator<_BidIt2>& _Last) noexcept {
13811385
_Verify_range(_Last._Get_current(), _First.current); // note reversed parameters
13821386
}
13831387

13841388
template <class _BidIt2 = _BidIt, enable_if_t<_Offset_verifiable_v<_BidIt2>, int> = 0>
1385-
constexpr void _Verify_offset(const difference_type _Off) const noexcept(noexcept(current._Verify_offset(-_Off))) {
1389+
constexpr void _Verify_offset(const difference_type _Off) const noexcept {
13861390
_STL_VERIFY(_Off != _Min_possible_v<difference_type>, "integer overflow");
13871391
current._Verify_offset(-_Off);
13881392
}
@@ -1411,7 +1415,7 @@ protected:
14111415
template <class _BidIt1, class _BidIt2>
14121416
_NODISCARD _CONSTEXPR17 bool
14131417
operator==(const reverse_iterator<_BidIt1>& _Left, const reverse_iterator<_BidIt2>& _Right) noexcept(
1414-
noexcept(_Left._Get_current() == _Right._Get_current())) /* strengthened */
1418+
noexcept(_Implicitly_convert_to<bool>(_Left._Get_current() == _Right._Get_current()))) /* strengthened */
14151419
#ifdef __cpp_lib_concepts
14161420
// clang-format off
14171421
requires requires {
@@ -1424,7 +1428,7 @@ _NODISCARD _CONSTEXPR17 bool
14241428
template <class _BidIt1, class _BidIt2>
14251429
_NODISCARD _CONSTEXPR17 bool
14261430
operator!=(const reverse_iterator<_BidIt1>& _Left, const reverse_iterator<_BidIt2>& _Right) noexcept(
1427-
noexcept(_Left._Get_current() != _Right._Get_current())) /* strengthened */
1431+
noexcept(_Implicitly_convert_to<bool>(_Left._Get_current() != _Right._Get_current()))) /* strengthened */
14281432
#ifdef __cpp_lib_concepts
14291433
// clang-format off
14301434
requires requires {
@@ -1437,7 +1441,7 @@ _NODISCARD _CONSTEXPR17 bool
14371441
template <class _BidIt1, class _BidIt2>
14381442
_NODISCARD _CONSTEXPR17 bool
14391443
operator<(const reverse_iterator<_BidIt1>& _Left, const reverse_iterator<_BidIt2>& _Right) noexcept(
1440-
noexcept(_Left._Get_current() > _Right._Get_current())) /* strengthened */
1444+
noexcept(_Implicitly_convert_to<bool>(_Left._Get_current() > _Right._Get_current()))) /* strengthened */
14411445
#ifdef __cpp_lib_concepts
14421446
// clang-format off
14431447
requires requires {
@@ -1450,7 +1454,7 @@ _NODISCARD _CONSTEXPR17 bool
14501454
template <class _BidIt1, class _BidIt2>
14511455
_NODISCARD _CONSTEXPR17 bool
14521456
operator>(const reverse_iterator<_BidIt1>& _Left, const reverse_iterator<_BidIt2>& _Right) noexcept(
1453-
noexcept(_Left._Get_current() < _Right._Get_current())) /* strengthened */
1457+
noexcept(_Implicitly_convert_to<bool>(_Left._Get_current() < _Right._Get_current()))) /* strengthened */
14541458
#ifdef __cpp_lib_concepts
14551459
// clang-format off
14561460
requires requires {
@@ -1463,7 +1467,7 @@ _NODISCARD _CONSTEXPR17 bool
14631467
template <class _BidIt1, class _BidIt2>
14641468
_NODISCARD _CONSTEXPR17 bool
14651469
operator<=(const reverse_iterator<_BidIt1>& _Left, const reverse_iterator<_BidIt2>& _Right) noexcept(
1466-
noexcept(_Left._Get_current() >= _Right._Get_current())) /* strengthened */
1470+
noexcept(_Implicitly_convert_to<bool>(_Left._Get_current() >= _Right._Get_current()))) /* strengthened */
14671471
#ifdef __cpp_lib_concepts
14681472
// clang-format off
14691473
requires requires {
@@ -1476,7 +1480,7 @@ _NODISCARD _CONSTEXPR17 bool
14761480
template <class _BidIt1, class _BidIt2>
14771481
_NODISCARD _CONSTEXPR17 bool
14781482
operator>=(const reverse_iterator<_BidIt1>& _Left, const reverse_iterator<_BidIt2>& _Right) noexcept(
1479-
noexcept(_Left._Get_current() <= _Right._Get_current())) /* strengthened */
1483+
noexcept(_Implicitly_convert_to<bool>(_Left._Get_current() <= _Right._Get_current()))) /* strengthened */
14801484
#ifdef __cpp_lib_concepts
14811485
// clang-format off
14821486
requires requires {
@@ -1616,13 +1620,13 @@ _NODISCARD _CONSTEXPR17 reverse_iterator<const _Elem*> rend(initializer_list<_El
16161620
}
16171621

16181622
template <class _Container>
1619-
_NODISCARD _CONSTEXPR17 auto crbegin(const _Container& _Cont) noexcept(noexcept(rbegin(_Cont))) /* strengthened */
1623+
_NODISCARD _CONSTEXPR17 auto crbegin(const _Container& _Cont) noexcept(noexcept(_STD rbegin(_Cont))) /* strengthened */
16201624
-> decltype(_STD rbegin(_Cont)) {
16211625
return _STD rbegin(_Cont);
16221626
}
16231627

16241628
template <class _Container>
1625-
_NODISCARD _CONSTEXPR17 auto crend(const _Container& _Cont) noexcept(noexcept(rbegin(_Cont))) /* strengthened */
1629+
_NODISCARD _CONSTEXPR17 auto crend(const _Container& _Cont) noexcept(noexcept(_STD rend(_Cont))) /* strengthened */
16261630
-> decltype(_STD rend(_Cont)) {
16271631
return _STD rend(_Cont);
16281632
}
@@ -1654,7 +1658,8 @@ _NODISCARD constexpr ptrdiff_t ssize(const _Ty (&)[_Size]) noexcept {
16541658
#endif // _HAS_CXX20
16551659

16561660
template <class _Container>
1657-
_NODISCARD constexpr auto empty(const _Container& _Cont) noexcept(noexcept(_Cont.empty())) /* strengthened */
1661+
_NODISCARD constexpr auto empty(const _Container& _Cont) noexcept(
1662+
noexcept(_Fake_decay_copy(_Cont.empty()))) /* strengthened */
16581663
-> decltype(_Cont.empty()) {
16591664
return _Cont.empty();
16601665
}
@@ -1670,13 +1675,14 @@ _NODISCARD constexpr bool empty(initializer_list<_Elem> _Ilist) noexcept {
16701675
}
16711676

16721677
template <class _Container>
1673-
_NODISCARD constexpr auto data(_Container& _Cont) noexcept(noexcept(_Cont.data())) /* strengthened */
1678+
_NODISCARD constexpr auto data(_Container& _Cont) noexcept(noexcept(_Fake_decay_copy(_Cont.data()))) /* strengthened */
16741679
-> decltype(_Cont.data()) {
16751680
return _Cont.data();
16761681
}
16771682

16781683
template <class _Container>
1679-
_NODISCARD constexpr auto data(const _Container& _Cont) noexcept(noexcept(_Cont.data())) /* strengthened */
1684+
_NODISCARD constexpr auto data(const _Container& _Cont) noexcept(
1685+
noexcept(_Fake_decay_copy(_Cont.data()))) /* strengthened */
16801686
-> decltype(_Cont.data()) {
16811687
return _Cont.data();
16821688
}
@@ -1692,13 +1698,6 @@ _NODISCARD constexpr const _Elem* data(initializer_list<_Elem> _Ilist) noexcept
16921698
}
16931699

16941700
#ifdef __cpp_lib_concepts
1695-
template <class _Ty>
1696-
_NODISCARD _Ty _Fake_decay_copy(_Ty) noexcept;
1697-
// _Fake_decay_copy<T>(E):
1698-
// (1) has type T [decay_t<decltype((E))> if T is deduced],
1699-
// (2) is well-formed if and only if E is implicitly convertible to T and T is destructible, and
1700-
// (3) is non-throwing if and only if both conversion from decltype((E)) to T and destruction of T are non-throwing.
1701-
17021701
template <class _Ty1, class _Ty2>
17031702
concept _Not_same_as = !same_as<remove_cvref_t<_Ty1>, remove_cvref_t<_Ty2>>;
17041703

@@ -3355,19 +3354,15 @@ public:
33553354

33563355
_NODISCARD _CONSTEXPR17 reference operator*() const
33573356
#ifdef __cpp_lib_concepts
3358-
#ifdef __EDG__ // TRANSITION, VSO-1132105
3359-
noexcept(noexcept(_RANGES iter_move(_STD declval<const _Iter&>()))) /* strengthened */ {
3360-
#else // ^^^ workaround / no workaround vvv
33613357
noexcept(noexcept(_RANGES iter_move(_Current))) /* strengthened */ {
3362-
#endif // TRANSITION, VSO-1132105
33633358
return _RANGES iter_move(_Current);
33643359
#else // ^^^ __cpp_lib_concepts / !__cpp_lib_concepts vvv
33653360
noexcept(noexcept(static_cast<reference>(*_Current))) /* strengthened */ {
33663361
return static_cast<reference>(*_Current);
33673362
#endif // __cpp_lib_concepts
33683363
}
33693364

3370-
_NODISCARD _CXX20_DEPRECATE_MOVE_ITERATOR_ARROW _CONSTEXPR17 pointer operator->() const
3365+
_CXX20_DEPRECATE_MOVE_ITERATOR_ARROW _NODISCARD _CONSTEXPR17 pointer operator->() const
33713366
noexcept(is_nothrow_copy_constructible_v<_Iter>) /* strengthened */ {
33723367
return _Current;
33733368
}
@@ -3417,7 +3412,7 @@ public:
34173412
}
34183413

34193414
_NODISCARD _CONSTEXPR17 move_iterator operator+(const difference_type _Off) const
3420-
noexcept(is_nothrow_copy_constructible_v<_Iter>&& noexcept(_Current + _Off)) /* strengthened */ {
3415+
noexcept(noexcept(move_iterator(_Current + _Off))) /* strengthened */ {
34213416
return move_iterator(_Current + _Off);
34223417
}
34233418

@@ -3428,7 +3423,7 @@ public:
34283423
}
34293424

34303425
_NODISCARD _CONSTEXPR17 move_iterator operator-(const difference_type _Off) const
3431-
noexcept(is_nothrow_copy_constructible_v<_Iter>&& noexcept(_Current - _Off)) /* strengthened */ {
3426+
noexcept(noexcept(move_iterator(_Current - _Off))) /* strengthened */ {
34323427
return move_iterator(_Current - _Off);
34333428
}
34343429

@@ -3440,11 +3435,7 @@ public:
34403435

34413436
_NODISCARD _CONSTEXPR17 reference operator[](const difference_type _Off) const
34423437
#ifdef __cpp_lib_concepts
3443-
#ifdef __EDG__ // TRANSITION, VSO-1132105
3444-
noexcept(noexcept(_RANGES iter_move(_STD declval<const _Iter&>() + difference_type{}))) /* strengthened */ {
3445-
#else // ^^^ workaround / no workaround vvv
34463438
noexcept(noexcept(_RANGES iter_move(_Current + _Off))) /* strengthened */ {
3447-
#endif // TRANSITION, VSO-1132105
34483439
return _RANGES iter_move(_Current + _Off);
34493440
#else // ^^^ __cpp_lib_concepts / !__cpp_lib_concepts vvv
34503441
noexcept(noexcept(_STD move(_Current[_Off]))) /* strengthened */ {
@@ -3454,8 +3445,9 @@ public:
34543445

34553446
#ifdef __cpp_lib_concepts
34563447
template <sentinel_for<_Iter> _Sent>
3457-
_NODISCARD_FRIEND constexpr bool operator==(const move_iterator& _Left, const move_sentinel<_Sent>& _Right)
3458-
noexcept(_Left._Current == _Right._Get_last())) /* strengthened */ {
3448+
_NODISCARD_FRIEND constexpr bool
3449+
operator==(const move_iterator& _Left, const move_sentinel<_Sent>& _Right) noexcept(
3450+
noexcept(_Implicitly_convert_to<bool>(_Left._Current == _Right._Get_last()))) /* strengthened */ {
34593451
return _Left._Current == _Right._Get_last();
34603452
}
34613453

@@ -3494,32 +3486,20 @@ public:
34943486
#endif // __cpp_lib_concepts
34953487

34963488
template <class _Iter2, enable_if_t<_Range_verifiable_v<_Iter, _Iter2>, int> = 0>
3497-
friend constexpr void _Verify_range(const move_iterator& _First, const move_iterator<_Iter2>& _Last)
3498-
#ifdef __EDG__ // TRANSITION, VSO-1222776
3499-
noexcept(noexcept(_Verify_range(_STD declval<const _Iter&>(), _STD declval<const _Iter2&>())))
3500-
#else // ^^^ workaround / no workaround vvv
3501-
noexcept(noexcept(_Verify_range(_First._Current, _Last.base())))
3502-
#endif // TRANSITION, VSO-1222776
3503-
{
3504-
_Verify_range(_First._Current, _Last.base());
3489+
friend constexpr void _Verify_range(const move_iterator& _First, const move_iterator<_Iter2>& _Last) noexcept {
3490+
_Verify_range(_First._Current, _Last._Get_current());
35053491
}
35063492
#ifdef __cpp_lib_concepts
35073493
template <sentinel_for<_Iter> _Sent, enable_if_t<_Range_verifiable_v<_Iter, _Sent>, int> = 0>
3508-
friend constexpr void _Verify_range(const move_iterator& _First, const move_sentinel<_Sent>& _Last)
3509-
#ifdef __EDG__ // TRANSITION, VSO-1222776
3510-
noexcept(noexcept(_Verify_range(_STD declval<const _Iter&>(), _STD declval<const _Sent&>())))
3511-
#else // ^^^ workaround / no workaround vvv
3512-
noexcept(noexcept(_Verify_range(_First._Current, _Last._Get_last())))
3513-
#endif // TRANSITION, VSO-1222776
3514-
{
3494+
friend constexpr void _Verify_range(const move_iterator& _First, const move_sentinel<_Sent>& _Last) noexcept {
35153495
_Verify_range(_First._Current, _Last._Get_last());
35163496
}
35173497
#endif // __cpp_lib_concepts
35183498

35193499
using _Prevent_inheriting_unwrap = move_iterator;
35203500

35213501
template <class _Iter2 = iterator_type, enable_if_t<_Offset_verifiable_v<_Iter2>, int> = 0>
3522-
constexpr void _Verify_offset(const difference_type _Off) const noexcept(noexcept(_Current._Verify_offset(_Off))) {
3502+
constexpr void _Verify_offset(const difference_type _Off) const noexcept {
35233503
_Current._Verify_offset(_Off);
35243504
}
35253505

@@ -3537,12 +3517,20 @@ public:
35373517
static constexpr bool _Unwrap_when_unverified = _Do_unwrap_when_unverified_v<iterator_type>;
35383518

35393519
template <class _Src, enable_if_t<_Wrapped_seekable_v<iterator_type, const _Src&>, int> = 0>
3540-
constexpr void _Seek_to(const move_iterator<_Src>& _It) noexcept(noexcept(_Current._Seek_to(_It.base()))) {
3520+
constexpr void _Seek_to(const move_iterator<_Src>& _It) noexcept(noexcept(_Current._Seek_to(_It._Get_current()))) {
35413521
_Current._Seek_to(_It.base());
35423522
}
35433523
template <class _Src, enable_if_t<_Wrapped_seekable_v<iterator_type, _Src>, int> = 0>
3544-
constexpr void _Seek_to(move_iterator<_Src>&& _It) noexcept(noexcept(_Current._Seek_to(_STD move(_It).base()))) {
3545-
_Current._Seek_to(_STD move(_It).base());
3524+
constexpr void _Seek_to(move_iterator<_Src>&& _It) noexcept(
3525+
noexcept(_Current._Seek_to(_STD move(_It)._Get_current()))) {
3526+
_Current._Seek_to(_STD move(_It)._Get_current());
3527+
}
3528+
3529+
constexpr const iterator_type& _Get_current() const& noexcept {
3530+
return _Current;
3531+
}
3532+
constexpr iterator_type&& _Get_current() && noexcept {
3533+
return static_cast<iterator_type&&>(_Current);
35463534
}
35473535

35483536
private:
@@ -3570,8 +3558,9 @@ _NODISCARD _CONSTEXPR17 bool operator!=(const move_iterator<_Iter1>& _Left,
35703558
#endif // !_HAS_CXX20
35713559

35723560
template <class _Iter1, class _Iter2>
3573-
_NODISCARD _CONSTEXPR17 bool operator<(const move_iterator<_Iter1>& _Left,
3574-
const move_iterator<_Iter2>& _Right) noexcept(noexcept(_Left.base() < _Right.base())) /* strengthened */
3561+
_NODISCARD _CONSTEXPR17 bool
3562+
operator<(const move_iterator<_Iter1>& _Left, const move_iterator<_Iter2>& _Right) noexcept(
3563+
noexcept(_Implicitly_convert_to<bool>(_Left.base() < _Right.base()))) /* strengthened */
35753564
#ifdef __cpp_lib_concepts
35763565
// clang-format off
35773566
requires requires {
@@ -3629,7 +3618,7 @@ _NODISCARD _CONSTEXPR17 auto
36293618
template <class _Iter>
36303619
_NODISCARD _CONSTEXPR17 move_iterator<_Iter>
36313620
operator+(typename move_iterator<_Iter>::difference_type _Off, const move_iterator<_Iter>& _Right) noexcept(
3632-
is_nothrow_copy_constructible_v<_Iter>&& noexcept(_Right.base() + _Off)) /* strengthened */
3621+
noexcept(move_iterator<_Iter>(_Right.base() + _Off))) /* strengthened */
36333622
#ifdef __cpp_lib_concepts
36343623
// clang-format off
36353624
requires requires {
@@ -3960,7 +3949,6 @@ namespace ranges {
39603949
}
39613950
}
39623951

3963-
39643952
#if _HAS_CXX23
39653953
template <class _Out, class _Ty>
39663954
struct out_value_result {
@@ -4316,7 +4304,6 @@ _CONSTEXPR20 void fill(const _FwdIt _First, const _FwdIt _Last, const _Ty& _Val)
43164304
}
43174305
}
43184306

4319-
43204307
#if _HAS_CXX17
43214308
template <class _ExPo, class _FwdIt, class _Ty, _Enable_if_execution_policy_t<_ExPo> = 0>
43224309
void fill(_ExPo&&, _FwdIt _First, _FwdIt _Last, const _Ty& _Val) noexcept /* terminates */ {
@@ -4595,7 +4582,6 @@ _NODISCARD _CONSTEXPR20 bool equal(
45954582
}
45964583
}
45974584

4598-
45994585
#if _HAS_CXX17
46004586
template <class _ExPo, class _FwdIt1, class _FwdIt2, class _Pr, _Enable_if_execution_policy_t<_ExPo> = 0>
46014587
_NODISCARD bool equal(_ExPo&& _Exec, const _FwdIt1 _First1, const _FwdIt1 _Last1, const _FwdIt2 _First2,
@@ -5241,7 +5227,6 @@ _NODISCARD _CONSTEXPR20 _Iter_diff_t<_InIt> count(const _InIt _First, const _InI
52415227
}
52425228
}
52435229

5244-
52455230
#if _HAS_CXX17
52465231
template <class _ExPo, class _FwdIt, class _Ty, _Enable_if_execution_policy_t<_ExPo> = 0>
52475232
_NODISCARD _Iter_diff_t<_FwdIt> count(
@@ -5450,7 +5435,6 @@ _CONSTEXPR20 void reverse(const _BidIt _First, const _BidIt _Last) { // reverse
54505435
}
54515436
}
54525437

5453-
54545438
#if _HAS_CXX17
54555439
template <class _ExPo, class _BidIt, _Enable_if_execution_policy_t<_ExPo> = 0>
54565440
void reverse(_ExPo&&, _BidIt _First, _BidIt _Last) noexcept /* terminates */ {

0 commit comments

Comments
 (0)