template<class T> void* voidify(T& ptr) noexcept { return const_cast<void*>(static_cast<const volatile void*>(addressof(ptr))); }
template<class I>
concept no-throw-input-iterator = // exposition only
InputIterator<I> &&
is_lvalue_reference_v<iter_reference_t<I>> &&
Same<remove_cvref_t<iter_reference_t<I>>, iter_value_t<I>>;
template<class S, class I>
concept no-throw-sentinel = Sentinel<S, I>; // exposition only
template<class R>
concept no-throw-input-range = // exposition only
Range<R> &&
no-throw-input-iterator<iterator_t<R>> &&
no-throw-sentinel<sentinel_t<R>, iterator_t<R>>;
template<class I>
concept no-throw-forward-iterator = // exposition only
no-throw-input-iterator<I> &&
ForwardIterator<I> &&
no-throw-sentinel<I, I>;
template<class R>
concept no-throw-forward-range = // exposition only
no-throw-input-range<R> &&
no-throw-forward-iterator<iterator_t<R>>;
template<class T> constexpr T* addressof(T& r) noexcept;
template<class ForwardIterator>
void uninitialized_default_construct(ForwardIterator first, ForwardIterator last);
for (; first != last; ++first) ::new (voidify(*first)) typename iterator_traits<ForwardIterator>::value_type;
namespace ranges {
template<no-throw-forward-iterator I, no-throw-sentinel<I> S>
requires DefaultConstructible<iter_value_t<I>>
I uninitialized_default_construct(I first, S last);
template<no-throw-forward-range R>
requires DefaultConstructible<iter_value_t<iterator_t<R>>>
safe_iterator_t<R> uninitialized_default_construct(R&& r);
}
for (; first != last; ++first) ::new (voidify(*first)) remove_reference_t<iter_reference_t<I>>; return first;
template<class ForwardIterator, class Size>
ForwardIterator uninitialized_default_construct_n(ForwardIterator first, Size n);
for (; n > 0; (void)++first, --n) ::new (voidify(*first)) typename iterator_traits<ForwardIterator>::value_type; return first;
namespace ranges {
template<no-throw-forward-iterator I>
requires DefaultConstructible<iter_value_t<I>>
I uninitialized_default_construct_n(I first, iter_difference_t<I> n);
}
template<class ForwardIterator>
void uninitialized_value_construct(ForwardIterator first, ForwardIterator last);
for (; first != last; ++first) ::new (voidify(*first)) typename iterator_traits<ForwardIterator>::value_type();
namespace ranges {
template<no-throw-forward-iterator I, no-throw-sentinel<I> S>
requires DefaultConstructible<iter_value_t<I>>
I uninitialized_value_construct(I first, S last);
template<no-throw-forward-range R>
requires DefaultConstructible<iter_value_t<iterator_t<R>>>
safe_iterator_t<R> uninitialized_value_construct(R&& r);
}
for (; first != last; ++first) ::new (voidify(*first)) remove_reference_t<iter_reference_t<I>>(); return first;
template<class ForwardIterator, class Size>
ForwardIterator uninitialized_value_construct_n(ForwardIterator first, Size n);
for (; n > 0; (void)++first, --n) ::new (voidify(*first)) typename iterator_traits<ForwardIterator>::value_type(); return first;
namespace ranges {
template<no-throw-forward-iterator I>
requires DefaultConstructible<iter_value_t<I>>
I uninitialized_value_construct_n(I first, iter_difference_t<I> n);
}
template<class InputIterator, class ForwardIterator>
ForwardIterator uninitialized_copy(InputIterator first, InputIterator last,
ForwardIterator result);
for (; first != last; ++result, (void) ++first) ::new (voidify(*result)) typename iterator_traits<ForwardIterator>::value_type(*first);
namespace ranges {
template<InputIterator I, Sentinel<I> S1,
no-throw-forward-iterator O, no-throw-sentinel<O> S2>
requires Constructible<iter_value_t<O>, iter_reference_t<I>>
uninitialized_copy_result<I, O>
uninitialized_copy(I ifirst, S1 ilast, O ofirst, S2 olast);
template<InputRange IR, no-throw-forward-range OR>
requires Constructible<iter_value_t<iterator_t<OR>>, iter_reference_t<iterator_t<IR>>>
uninitialized_copy_result<safe_iterator_t<IR>, safe_iterator_t<OR>>
uninitialized_copy(IR&& input_range, OR&& output_range);
}
for (; ifirst != ilast && ofirst != olast; ++ofirst, (void)++ifirst) { ::new (voidify(*ofirst)) remove_reference_t<iter_reference_t<O>>(*ifirst); } return {ifirst, ofirst};
template<class InputIterator, class Size, class ForwardIterator>
ForwardIterator uninitialized_copy_n(InputIterator first, Size n, ForwardIterator result);
for ( ; n > 0; ++result, (void) ++first, --n) { ::new (voidify(*result)) typename iterator_traits<ForwardIterator>::value_type(*first); }
namespace ranges {
template<InputIterator I, no-throw-forward-iterator O, no-throw-sentinel<O> S>
requires Constructible<iter_value_t<O>, iter_reference_t<I>>
uninitialized_copy_n_result<I, O>
uninitialized_copy_n(I ifirst, iter_difference_t<I> n, O ofirst, S olast);
}
template<class InputIterator, class ForwardIterator>
ForwardIterator uninitialized_move(InputIterator first, InputIterator last,
ForwardIterator result);
for (; first != last; (void)++result, ++first) ::new (voidify(*result)) typename iterator_traits<ForwardIterator>::value_type(std::move(*first)); return result;
namespace ranges {
template<InputIterator I, Sentinel<I> S1,
no-throw-forward-iterator O, no-throw-sentinel<O> S2>
requires Constructible<iter_value_t<O>, iter_rvalue_reference_t<I>>
uninitialized_move_result<I, O>
uninitialized_move(I ifirst, S1 ilast, O ofirst, S2 olast);
template<InputRange IR, no-throw-forward-range OR>
requires Constructible<iter_value_t<iterator_t<OR>>, iter_rvalue_reference_t<iterator_t<IR>>>
uninitialized_move_result<safe_iterator_t<IR>, safe_iterator_t<OR>>
uninitialized_move(IR&& input_range, OR&& output_range);
}
for (; ifirst != ilast && ofirst != olast; ++ofirst, (void)++ifirst) { ::new (voidify(*ofirst)) remove_reference_t<iter_reference_t<O>>(ranges::iter_move(ifirst)); } return {ifirst, ofirst};
template<class InputIterator, class Size, class ForwardIterator>
pair<InputIterator, ForwardIterator>
uninitialized_move_n(InputIterator first, Size n, ForwardIterator result);
for (; n > 0; ++result, (void) ++first, --n) ::new (voidify(*result)) typename iterator_traits<ForwardIterator>::value_type(std::move(*first)); return {first,result};
namespace ranges {
template<InputIterator I, no-throw-forward-iterator O, no-throw-sentinel<O> S>
requires Constructible<iter_value_t<O>, iter_rvalue_reference_t<I>>
uninitialized_move_n_result<I, O>
uninitialized_move_n(I ifirst, iter_difference_t<I> n, O ofirst, S olast);
}
auto t = uninitialized_move(counted_iterator(ifirst, n), default_sentinel, ofirst, olast); return {t.in.base(), t.out};
template<class ForwardIterator, class T>
void uninitialized_fill(ForwardIterator first, ForwardIterator last, const T& x);
for (; first != last; ++first) ::new (voidify(*first)) typename iterator_traits<ForwardIterator>::value_type(x);
namespace ranges {
template<no-throw-forward-iterator I, no-throw-sentinel<I> S, class T>
requires Constructible<iter_value_t<I>, const T&>
I uninitialized_fill(I first, S last, const T& x);
template<no-throw-forward-range R, class T>
requires Constructible<iter_value_t<iterator_t<R>>, const T&>
safe_iterator_t<R> uninitialized_fill(R&& r, const T& x);
}
for (; first != last; ++first) { ::new (voidify(*first)) remove_reference_t<iter_reference_t<I>>(x); } return first;
template<class ForwardIterator, class Size, class T>
ForwardIterator uninitialized_fill_n(ForwardIterator first, Size n, const T& x);
for (; n--; ++first) ::new (voidify(*first)) typename iterator_traits<ForwardIterator>::value_type(x); return first;
namespace ranges {
template<no-throw-forward-iterator I, class T>
requires Constructible<iter_value_t<I>, const T&>
I uninitialized_fill_n(I first, iter_difference_t<I> n, const T& x);
}
template<class T>
void destroy_at(T* location);
namespace ranges {
template<Destructible T>
void destroy_at(T* location) noexcept;
}
template<class ForwardIterator>
void destroy(ForwardIterator first, ForwardIterator last);
namespace ranges {
template<no-throw-input-iterator I, no-throw-sentinel<I> S>
requires Destructible<iter_value_t<I>>
I destroy(I first, S last) noexcept;
template<no-throw-input-range R>
requires Destructible<iter_value_t<iterator_t<R>>>
safe_iterator_t<R> destroy(R&& r) noexcept;
}
for (; first != last; ++first) destroy_at(addressof(*first)); return first;
template<class ForwardIterator, class Size>
ForwardIterator destroy_n(ForwardIterator first, Size n);
for (; n > 0; (void)++first, --n) destroy_at(addressof(*first)); return first;
namespace ranges {
template<no-throw-input-iterator I>
requires Destructible<iter_value_t<I>>
I destroy_n(I first, iter_difference_t<I> n) noexcept;
}