@@ -1601,33 +1601,38 @@ namespace ranges {
16011601 template <input_iterator _It, sentinel_for<_It> _Se, _No_throw_forward_iterator _Out,
16021602 _No_throw_sentinel_for<_Out> _OSe>
16031603 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(
16051605 _It _IFirst, _Se _ILast, _Out _OFirst, _OSe _OLast) {
16061606 // clang-format on
16071607 constexpr bool _Is_sized1 = sized_sentinel_for<_Se, _It>;
16081608 constexpr bool _Is_sized2 = sized_sentinel_for<_OSe, _Out>;
16091609 if constexpr (_Iter_move_cat<_It, _Out>::_Bitcopy_constructible
16101610 && _Sized_or_unreachable_sentinel_for<_Se, _It> //
16111611 && _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+ }
16211626 }
1622- } else {
1623- _Uninitialized_backout _Backout{_STD move(_OFirst)};
1627+ }
16241628
1625- for (; _IFirst != _ILast && _Backout._Last != _OLast; ++_IFirst) {
1626- _Backout._Emplace_back(_RANGES iter_move(_IFirst));
1627- }
1629+ _Uninitialized_backout _Backout{_STD move(_OFirst)};
16281630
1629- return {_STD move(_IFirst), _Backout._Release()};
1631+ for (; _IFirst != _ILast && _Backout._Last != _OLast; ++_IFirst) {
1632+ _Backout._Emplace_back(_RANGES iter_move(_IFirst));
16301633 }
1634+
1635+ return {_STD move(_IFirst), _Backout._Release()};
16311636 }
16321637} // namespace ranges
16331638#endif // __cpp_lib_concepts
@@ -1715,7 +1720,7 @@ _CONSTEXPR20 _NoThrowFwdIt _Uninitialized_copy_unchecked(_InIt _First, const _In
17151720}
17161721
17171722template <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) {
17191724 // copy [_First, _Last) to raw [_Dest, ...)
17201725 _Adl_verify_range(_First, _Last);
17211726 auto _UFirst = _Get_unwrapped(_First);
@@ -1786,28 +1791,37 @@ _CONSTEXPR20 _Alloc_ptr_t<_Alloc> _Uninitialized_fill_n(
17861791}
17871792
17881793template <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) {
17901795 // copy _Val throughout raw [_First, _Last)
17911796 _Adl_verify_range(_First, _Last);
17921797 auto _UFirst = _Get_unwrapped(_First);
17931798 const auto _ULast = _Get_unwrapped(_Last);
17941799 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+ {
17981812 if (_Is_all_bits_zero(_Val)) {
17991813 _Fill_zero_memset(_UFirst, static_cast<size_t>(_ULast - _UFirst));
18001814 return;
18011815 }
18021816 }
1817+ }
18031818
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);
18101822 }
1823+
1824+ _Backout._Release();
18111825}
18121826
18131827template <class _NoThrowFwdIt>
@@ -1849,19 +1863,24 @@ _CONSTEXPR20 _Alloc_ptr_t<_Alloc> _Uninitialized_value_construct_n(
18491863}
18501864
18511865template <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) {
18531867 // value-initialize all elements in [_UFirst, _UFirst + _Count_raw)
18541868 _STL_INTERNAL_CHECK(_Count >= 0);
18551869 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 );
18611875 }
1876+ }
18621877
1863- return _Backout._Release();
1878+ _Uninitialized_backout<_NoThrowFwdIt> _Backout{_UFirst};
1879+ for (; 0 < _Count; --_Count) {
1880+ _Backout._Emplace_back();
18641881 }
1882+
1883+ return _Backout._Release();
18651884}
18661885
18671886#if _HAS_DEPRECATED_TEMPORARY_BUFFER
0 commit comments