@@ -162,6 +162,14 @@ _NODISCARD _CONSTEXPR_BIT_CAST _To _Bit_cast(const _From& _Val) noexcept {
162
162
#endif // ^^^ no workaround ^^^
163
163
}
164
164
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
+
165
173
template <class _Ty>
166
174
struct _Get_first_parameter;
167
175
@@ -1204,15 +1212,12 @@ _NODISCARD _CONSTEXPR17 _BidIt prev(_BidIt _First, _Iter_diff_t<_BidIt> _Off = 1
1204
1212
return _First;
1205
1213
}
1206
1214
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->()));
1216
1221
1217
1222
template <class _BidIt>
1218
1223
class reverse_iterator {
@@ -1256,7 +1261,7 @@ public:
1256
1261
&& assignable_from<_BidIt&, const _Other&>
1257
1262
#endif // __cpp_lib_concepts
1258
1263
_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 */ {
1260
1265
current = _Right.current;
1261
1266
return *this;
1262
1267
}
@@ -1275,8 +1280,7 @@ public:
1275
1280
#ifdef __cpp_lib_concepts
1276
1281
// clang-format off
1277
1282
_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 */
1280
1284
requires (is_pointer_v<_BidIt> || requires(const _BidIt __i) { __i.operator->(); })
1281
1285
{
1282
1286
_BidIt _Tmp = current;
@@ -1289,9 +1293,9 @@ public:
1289
1293
}
1290
1294
// clang-format on
1291
1295
#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 */ {
1295
1299
_BidIt _Tmp = current;
1296
1300
--_Tmp;
1297
1301
if constexpr (is_pointer_v<_BidIt>) {
@@ -1327,7 +1331,7 @@ public:
1327
1331
}
1328
1332
1329
1333
_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 */ {
1331
1335
return reverse_iterator(current - _Off);
1332
1336
}
1333
1337
@@ -1338,7 +1342,7 @@ public:
1338
1342
}
1339
1343
1340
1344
_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 */ {
1342
1346
return reverse_iterator(current + _Off);
1343
1347
}
1344
1348
@@ -1376,13 +1380,13 @@ public:
1376
1380
using _Prevent_inheriting_unwrap = reverse_iterator;
1377
1381
1378
1382
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 {
1381
1385
_Verify_range(_Last._Get_current(), _First.current); // note reversed parameters
1382
1386
}
1383
1387
1384
1388
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 {
1386
1390
_STL_VERIFY(_Off != _Min_possible_v<difference_type>, "integer overflow");
1387
1391
current._Verify_offset(-_Off);
1388
1392
}
@@ -1411,7 +1415,7 @@ protected:
1411
1415
template <class _BidIt1, class _BidIt2>
1412
1416
_NODISCARD _CONSTEXPR17 bool
1413
1417
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 */
1415
1419
#ifdef __cpp_lib_concepts
1416
1420
// clang-format off
1417
1421
requires requires {
@@ -1424,7 +1428,7 @@ _NODISCARD _CONSTEXPR17 bool
1424
1428
template <class _BidIt1, class _BidIt2>
1425
1429
_NODISCARD _CONSTEXPR17 bool
1426
1430
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 */
1428
1432
#ifdef __cpp_lib_concepts
1429
1433
// clang-format off
1430
1434
requires requires {
@@ -1437,7 +1441,7 @@ _NODISCARD _CONSTEXPR17 bool
1437
1441
template <class _BidIt1, class _BidIt2>
1438
1442
_NODISCARD _CONSTEXPR17 bool
1439
1443
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 */
1441
1445
#ifdef __cpp_lib_concepts
1442
1446
// clang-format off
1443
1447
requires requires {
@@ -1450,7 +1454,7 @@ _NODISCARD _CONSTEXPR17 bool
1450
1454
template <class _BidIt1, class _BidIt2>
1451
1455
_NODISCARD _CONSTEXPR17 bool
1452
1456
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 */
1454
1458
#ifdef __cpp_lib_concepts
1455
1459
// clang-format off
1456
1460
requires requires {
@@ -1463,7 +1467,7 @@ _NODISCARD _CONSTEXPR17 bool
1463
1467
template <class _BidIt1, class _BidIt2>
1464
1468
_NODISCARD _CONSTEXPR17 bool
1465
1469
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 */
1467
1471
#ifdef __cpp_lib_concepts
1468
1472
// clang-format off
1469
1473
requires requires {
@@ -1476,7 +1480,7 @@ _NODISCARD _CONSTEXPR17 bool
1476
1480
template <class _BidIt1, class _BidIt2>
1477
1481
_NODISCARD _CONSTEXPR17 bool
1478
1482
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 */
1480
1484
#ifdef __cpp_lib_concepts
1481
1485
// clang-format off
1482
1486
requires requires {
@@ -1616,13 +1620,13 @@ _NODISCARD _CONSTEXPR17 reverse_iterator<const _Elem*> rend(initializer_list<_El
1616
1620
}
1617
1621
1618
1622
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 */
1620
1624
-> decltype(_STD rbegin(_Cont)) {
1621
1625
return _STD rbegin(_Cont);
1622
1626
}
1623
1627
1624
1628
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 */
1626
1630
-> decltype(_STD rend(_Cont)) {
1627
1631
return _STD rend(_Cont);
1628
1632
}
@@ -1654,7 +1658,8 @@ _NODISCARD constexpr ptrdiff_t ssize(const _Ty (&)[_Size]) noexcept {
1654
1658
#endif // _HAS_CXX20
1655
1659
1656
1660
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 */
1658
1663
-> decltype(_Cont.empty()) {
1659
1664
return _Cont.empty();
1660
1665
}
@@ -1670,13 +1675,14 @@ _NODISCARD constexpr bool empty(initializer_list<_Elem> _Ilist) noexcept {
1670
1675
}
1671
1676
1672
1677
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 */
1674
1679
-> decltype(_Cont.data()) {
1675
1680
return _Cont.data();
1676
1681
}
1677
1682
1678
1683
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 */
1680
1686
-> decltype(_Cont.data()) {
1681
1687
return _Cont.data();
1682
1688
}
@@ -1692,13 +1698,6 @@ _NODISCARD constexpr const _Elem* data(initializer_list<_Elem> _Ilist) noexcept
1692
1698
}
1693
1699
1694
1700
#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
-
1702
1701
template <class _Ty1, class _Ty2>
1703
1702
concept _Not_same_as = !same_as<remove_cvref_t<_Ty1>, remove_cvref_t<_Ty2>>;
1704
1703
@@ -3355,19 +3354,15 @@ public:
3355
3354
3356
3355
_NODISCARD _CONSTEXPR17 reference operator*() const
3357
3356
#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
3361
3357
noexcept(noexcept(_RANGES iter_move(_Current))) /* strengthened */ {
3362
- #endif // TRANSITION, VSO-1132105
3363
3358
return _RANGES iter_move(_Current);
3364
3359
#else // ^^^ __cpp_lib_concepts / !__cpp_lib_concepts vvv
3365
3360
noexcept(noexcept(static_cast<reference>(*_Current))) /* strengthened */ {
3366
3361
return static_cast<reference>(*_Current);
3367
3362
#endif // __cpp_lib_concepts
3368
3363
}
3369
3364
3370
- _NODISCARD _CXX20_DEPRECATE_MOVE_ITERATOR_ARROW _CONSTEXPR17 pointer operator->() const
3365
+ _CXX20_DEPRECATE_MOVE_ITERATOR_ARROW _NODISCARD _CONSTEXPR17 pointer operator->() const
3371
3366
noexcept(is_nothrow_copy_constructible_v<_Iter>) /* strengthened */ {
3372
3367
return _Current;
3373
3368
}
@@ -3417,7 +3412,7 @@ public:
3417
3412
}
3418
3413
3419
3414
_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 */ {
3421
3416
return move_iterator(_Current + _Off);
3422
3417
}
3423
3418
@@ -3428,7 +3423,7 @@ public:
3428
3423
}
3429
3424
3430
3425
_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 */ {
3432
3427
return move_iterator(_Current - _Off);
3433
3428
}
3434
3429
@@ -3440,11 +3435,7 @@ public:
3440
3435
3441
3436
_NODISCARD _CONSTEXPR17 reference operator[](const difference_type _Off) const
3442
3437
#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
3446
3438
noexcept(noexcept(_RANGES iter_move(_Current + _Off))) /* strengthened */ {
3447
- #endif // TRANSITION, VSO-1132105
3448
3439
return _RANGES iter_move(_Current + _Off);
3449
3440
#else // ^^^ __cpp_lib_concepts / !__cpp_lib_concepts vvv
3450
3441
noexcept(noexcept(_STD move(_Current[_Off]))) /* strengthened */ {
@@ -3454,8 +3445,9 @@ public:
3454
3445
3455
3446
#ifdef __cpp_lib_concepts
3456
3447
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 */ {
3459
3451
return _Left._Current == _Right._Get_last();
3460
3452
}
3461
3453
@@ -3494,32 +3486,20 @@ public:
3494
3486
#endif // __cpp_lib_concepts
3495
3487
3496
3488
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());
3505
3491
}
3506
3492
#ifdef __cpp_lib_concepts
3507
3493
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 {
3515
3495
_Verify_range(_First._Current, _Last._Get_last());
3516
3496
}
3517
3497
#endif // __cpp_lib_concepts
3518
3498
3519
3499
using _Prevent_inheriting_unwrap = move_iterator;
3520
3500
3521
3501
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 {
3523
3503
_Current._Verify_offset(_Off);
3524
3504
}
3525
3505
@@ -3537,12 +3517,20 @@ public:
3537
3517
static constexpr bool _Unwrap_when_unverified = _Do_unwrap_when_unverified_v<iterator_type>;
3538
3518
3539
3519
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 ()))) {
3541
3521
_Current._Seek_to(_It.base());
3542
3522
}
3543
3523
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);
3546
3534
}
3547
3535
3548
3536
private:
@@ -3570,8 +3558,9 @@ _NODISCARD _CONSTEXPR17 bool operator!=(const move_iterator<_Iter1>& _Left,
3570
3558
#endif // !_HAS_CXX20
3571
3559
3572
3560
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 */
3575
3564
#ifdef __cpp_lib_concepts
3576
3565
// clang-format off
3577
3566
requires requires {
@@ -3629,7 +3618,7 @@ _NODISCARD _CONSTEXPR17 auto
3629
3618
template <class _Iter>
3630
3619
_NODISCARD _CONSTEXPR17 move_iterator<_Iter>
3631
3620
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 */
3633
3622
#ifdef __cpp_lib_concepts
3634
3623
// clang-format off
3635
3624
requires requires {
@@ -3960,7 +3949,6 @@ namespace ranges {
3960
3949
}
3961
3950
}
3962
3951
3963
-
3964
3952
#if _HAS_CXX23
3965
3953
template <class _Out, class _Ty>
3966
3954
struct out_value_result {
@@ -4316,7 +4304,6 @@ _CONSTEXPR20 void fill(const _FwdIt _First, const _FwdIt _Last, const _Ty& _Val)
4316
4304
}
4317
4305
}
4318
4306
4319
-
4320
4307
#if _HAS_CXX17
4321
4308
template <class _ExPo, class _FwdIt, class _Ty, _Enable_if_execution_policy_t<_ExPo> = 0>
4322
4309
void fill(_ExPo&&, _FwdIt _First, _FwdIt _Last, const _Ty& _Val) noexcept /* terminates */ {
@@ -4595,7 +4582,6 @@ _NODISCARD _CONSTEXPR20 bool equal(
4595
4582
}
4596
4583
}
4597
4584
4598
-
4599
4585
#if _HAS_CXX17
4600
4586
template <class _ExPo, class _FwdIt1, class _FwdIt2, class _Pr, _Enable_if_execution_policy_t<_ExPo> = 0>
4601
4587
_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
5241
5227
}
5242
5228
}
5243
5229
5244
-
5245
5230
#if _HAS_CXX17
5246
5231
template <class _ExPo, class _FwdIt, class _Ty, _Enable_if_execution_policy_t<_ExPo> = 0>
5247
5232
_NODISCARD _Iter_diff_t<_FwdIt> count(
@@ -5450,7 +5435,6 @@ _CONSTEXPR20 void reverse(const _BidIt _First, const _BidIt _Last) { // reverse
5450
5435
}
5451
5436
}
5452
5437
5453
-
5454
5438
#if _HAS_CXX17
5455
5439
template <class _ExPo, class _BidIt, _Enable_if_execution_policy_t<_ExPo> = 0>
5456
5440
void reverse(_ExPo&&, _BidIt _First, _BidIt _Last) noexcept /* terminates */ {
0 commit comments