@@ -1601,33 +1601,38 @@ namespace ranges {
1601
1601
template <input_iterator _It, sentinel_for<_It> _Se, _No_throw_forward_iterator _Out,
1602
1602
_No_throw_sentinel_for<_Out> _OSe>
1603
1603
requires (constructible_from<iter_value_t<_Out>, iter_rvalue_reference_t<_It>>)
1604
- uninitialized_move_result<_It, _Out> _Uninitialized_move_unchecked(
1604
+ _CONSTEXPR23 uninitialized_move_result<_It, _Out> _Uninitialized_move_unchecked(
1605
1605
_It _IFirst, _Se _ILast, _Out _OFirst, _OSe _OLast) {
1606
1606
// clang-format on
1607
1607
constexpr bool _Is_sized1 = sized_sentinel_for<_Se, _It>;
1608
1608
constexpr bool _Is_sized2 = sized_sentinel_for<_OSe, _Out>;
1609
1609
if constexpr (_Iter_move_cat<_It, _Out>::_Bitcopy_constructible
1610
1610
&& _Sized_or_unreachable_sentinel_for<_Se, _It> //
1611
1611
&& _Sized_or_unreachable_sentinel_for<_OSe, _Out>) {
1612
- if constexpr (_Is_sized1 && _Is_sized2) {
1613
- return _Copy_memcpy_common(_IFirst, _RANGES next(_IFirst, _STD move(_ILast)), _OFirst,
1614
- _RANGES next(_OFirst, _STD move(_OLast)));
1615
- } else if constexpr (_Is_sized1) {
1616
- return _Copy_memcpy_distance(_IFirst, _OFirst, _IFirst, _RANGES next(_IFirst, _STD move(_ILast)));
1617
- } else if constexpr (_Is_sized2) {
1618
- return _Copy_memcpy_distance(_IFirst, _OFirst, _OFirst, _RANGES next(_OFirst, _STD move(_OLast)));
1619
- } else {
1620
- _STL_ASSERT(false, "Tried to uninitialized_move two ranges with unreachable sentinels");
1612
+ #if _HAS_CXX23
1613
+ if (!_STD is_constant_evaluated())
1614
+ #endif // _HAS_CXX23
1615
+ {
1616
+ if constexpr (_Is_sized1 && _Is_sized2) {
1617
+ return _Copy_memcpy_common(_IFirst, _RANGES next(_IFirst, _STD move(_ILast)), _OFirst,
1618
+ _RANGES next(_OFirst, _STD move(_OLast)));
1619
+ } else if constexpr (_Is_sized1) {
1620
+ return _Copy_memcpy_distance(_IFirst, _OFirst, _IFirst, _RANGES next(_IFirst, _STD move(_ILast)));
1621
+ } else if constexpr (_Is_sized2) {
1622
+ return _Copy_memcpy_distance(_IFirst, _OFirst, _OFirst, _RANGES next(_OFirst, _STD move(_OLast)));
1623
+ } else {
1624
+ _STL_ASSERT(false, "Tried to uninitialized_move two ranges with unreachable sentinels");
1625
+ }
1621
1626
}
1622
- } else {
1623
- _Uninitialized_backout _Backout{_STD move(_OFirst)};
1627
+ }
1624
1628
1625
- for (; _IFirst != _ILast && _Backout._Last != _OLast; ++_IFirst) {
1626
- _Backout._Emplace_back(_RANGES iter_move(_IFirst));
1627
- }
1629
+ _Uninitialized_backout _Backout{_STD move(_OFirst)};
1628
1630
1629
- return {_STD move(_IFirst), _Backout._Release()};
1631
+ for (; _IFirst != _ILast && _Backout._Last != _OLast; ++_IFirst) {
1632
+ _Backout._Emplace_back(_RANGES iter_move(_IFirst));
1630
1633
}
1634
+
1635
+ return {_STD move(_IFirst), _Backout._Release()};
1631
1636
}
1632
1637
} // namespace ranges
1633
1638
#endif // __cpp_lib_concepts
@@ -1715,7 +1720,7 @@ _CONSTEXPR20 _NoThrowFwdIt _Uninitialized_copy_unchecked(_InIt _First, const _In
1715
1720
}
1716
1721
1717
1722
template <class _InIt, class _NoThrowFwdIt>
1718
- _NoThrowFwdIt uninitialized_copy(const _InIt _First, const _InIt _Last, _NoThrowFwdIt _Dest) {
1723
+ _CONSTEXPR23 _NoThrowFwdIt uninitialized_copy(const _InIt _First, const _InIt _Last, _NoThrowFwdIt _Dest) {
1719
1724
// copy [_First, _Last) to raw [_Dest, ...)
1720
1725
_Adl_verify_range(_First, _Last);
1721
1726
auto _UFirst = _Get_unwrapped(_First);
@@ -1786,28 +1791,37 @@ _CONSTEXPR20 _Alloc_ptr_t<_Alloc> _Uninitialized_fill_n(
1786
1791
}
1787
1792
1788
1793
template <class _NoThrowFwdIt, class _Tval>
1789
- void uninitialized_fill(const _NoThrowFwdIt _First, const _NoThrowFwdIt _Last, const _Tval& _Val) {
1794
+ _CONSTEXPR23 void uninitialized_fill(const _NoThrowFwdIt _First, const _NoThrowFwdIt _Last, const _Tval& _Val) {
1790
1795
// copy _Val throughout raw [_First, _Last)
1791
1796
_Adl_verify_range(_First, _Last);
1792
1797
auto _UFirst = _Get_unwrapped(_First);
1793
1798
const auto _ULast = _Get_unwrapped(_Last);
1794
1799
if constexpr (_Fill_memset_is_safe<_Unwrapped_t<const _NoThrowFwdIt&>, _Tval>) {
1795
- _Fill_memset(_UFirst, _Val, static_cast<size_t>(_ULast - _UFirst));
1796
- } else {
1797
- if constexpr (_Fill_zero_memset_is_safe<_Unwrapped_t<const _NoThrowFwdIt&>, _Tval>) {
1800
+ #if _HAS_CXX23
1801
+ if (!_STD is_constant_evaluated())
1802
+ #endif // _HAS_CXX23
1803
+ {
1804
+ _Fill_memset(_UFirst, _Val, static_cast<size_t>(_ULast - _UFirst));
1805
+ return;
1806
+ }
1807
+ } else if constexpr (_Fill_zero_memset_is_safe<_Unwrapped_t<const _NoThrowFwdIt&>, _Tval>) {
1808
+ #if _HAS_CXX23
1809
+ if (!_STD is_constant_evaluated())
1810
+ #endif // _HAS_CXX23
1811
+ {
1798
1812
if (_Is_all_bits_zero(_Val)) {
1799
1813
_Fill_zero_memset(_UFirst, static_cast<size_t>(_ULast - _UFirst));
1800
1814
return;
1801
1815
}
1802
1816
}
1817
+ }
1803
1818
1804
- _Uninitialized_backout<_Unwrapped_t<const _NoThrowFwdIt&>> _Backout{_UFirst};
1805
- while (_Backout._Last != _ULast) {
1806
- _Backout._Emplace_back(_Val);
1807
- }
1808
-
1809
- _Backout._Release();
1819
+ _Uninitialized_backout<_Unwrapped_t<const _NoThrowFwdIt&>> _Backout{_UFirst};
1820
+ while (_Backout._Last != _ULast) {
1821
+ _Backout._Emplace_back(_Val);
1810
1822
}
1823
+
1824
+ _Backout._Release();
1811
1825
}
1812
1826
1813
1827
template <class _NoThrowFwdIt>
@@ -1849,19 +1863,24 @@ _CONSTEXPR20 _Alloc_ptr_t<_Alloc> _Uninitialized_value_construct_n(
1849
1863
}
1850
1864
1851
1865
template <class _NoThrowFwdIt, class _Diff>
1852
- _NoThrowFwdIt _Uninitialized_value_construct_n_unchecked1(_NoThrowFwdIt _UFirst, _Diff _Count) {
1866
+ _CONSTEXPR23 _NoThrowFwdIt _Uninitialized_value_construct_n_unchecked1(_NoThrowFwdIt _UFirst, _Diff _Count) {
1853
1867
// value-initialize all elements in [_UFirst, _UFirst + _Count_raw)
1854
1868
_STL_INTERNAL_CHECK(_Count >= 0);
1855
1869
if constexpr (_Use_memset_value_construct_v<_NoThrowFwdIt>) {
1856
- return _Zero_range(_UFirst, _UFirst + _Count);
1857
- } else {
1858
- _Uninitialized_backout<_NoThrowFwdIt> _Backout{_UFirst};
1859
- for (; 0 < _Count; --_Count) {
1860
- _Backout._Emplace_back( );
1870
+ #if _HAS_CXX23
1871
+ if (!_STD is_constant_evaluated())
1872
+ #endif // _HAS_CXX23
1873
+ {
1874
+ return _Zero_range(_UFirst, _UFirst + _Count );
1861
1875
}
1876
+ }
1862
1877
1863
- return _Backout._Release();
1878
+ _Uninitialized_backout<_NoThrowFwdIt> _Backout{_UFirst};
1879
+ for (; 0 < _Count; --_Count) {
1880
+ _Backout._Emplace_back();
1864
1881
}
1882
+
1883
+ return _Backout._Release();
1865
1884
}
1866
1885
1867
1886
#if _HAS_DEPRECATED_TEMPORARY_BUFFER
0 commit comments