@@ -124,6 +124,18 @@ uninitialized_fill(_ForwardIterator __first, _ForwardIterator __last, const _Tp&
124124
125125// uninitialized_fill_n
126126
127+ template <class _Alloc , class _ForwardIterator , class _Size , class _Tp >
128+ inline _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20 _ForwardIterator
129+ __uninitialized_allocator_fill_n (_Alloc& __alloc, _ForwardIterator __first, _Size __n, const _Tp& __x) {
130+ _ForwardIterator __idx = __first;
131+ auto __guard = std::__make_exception_guard ([&] { std::__destroy (__first, __idx); });
132+ for (; __n > 0 ; ++__idx, (void )--__n)
133+ allocator_traits<_Alloc>::construct (__alloc, std::__to_address (__idx), __x);
134+ __guard.__complete ();
135+
136+ return __idx;
137+ }
138+
127139template <class _ValueType , class _ForwardIterator , class _Size , class _Tp >
128140inline _LIBCPP_HIDE_FROM_ABI _ForwardIterator
129141__uninitialized_fill_n (_ForwardIterator __first, _Size __n, const _Tp& __x) {
@@ -143,6 +155,20 @@ uninitialized_fill_n(_ForwardIterator __first, _Size __n, const _Tp& __x) {
143155 return std::__uninitialized_fill_n<_ValueType>(__first, __n, __x);
144156}
145157
158+ // __uninitialized_allocator_value_construct_n
159+
160+ template <class _Alloc , class _ForwardIterator , class _Size >
161+ inline _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20 _ForwardIterator
162+ __uninitialized_allocator_value_construct_n (_Alloc& __alloc, _ForwardIterator __first, _Size __n) {
163+ auto __idx = __first;
164+ auto __guard = std::__make_exception_guard ([&] { std::__destroy (__first, __idx); });
165+ for (; __n > 0 ; ++__idx, (void )--__n)
166+ allocator_traits<_Alloc>::construct (__alloc, std::__to_address (__idx));
167+ __guard.__complete ();
168+
169+ return __idx;
170+ }
171+
146172#if _LIBCPP_STD_VER >= 17
147173
148174// uninitialized_default_construct
0 commit comments