di 0.1.0
Loading...
Searching...
No Matches
uninitialized_move_n.h
Go to the documentation of this file.
1#pragma once
2
7#include "di/util/addressof.h"
9
10namespace di::container {
11namespace detail {
12 struct UninitializedMoveNFunction {
13 template<concepts::InputIterator It, concepts::UninitForwardIterator Out,
14 concepts::UninitSentinelFor<Out> OutSent>
15 requires(concepts::ConstructibleFrom<meta::IteratorValue<Out>, meta::IteratorRValue<It>>)
16 constexpr auto operator()(It in, meta::IteratorSSizeType<It> n, Out out, OutSent out_last) const
17 -> InOutResult<It, Out> {
18 for (; n > 0 && out != out_last; --n, ++in, ++out) {
19 util::construct_at(util::addressof(*out), container::iterator_move(in));
20 }
21 return { util::move(in), util::move(out) };
22 }
23 };
24}
25
26constexpr inline auto uninitialized_move_n = detail::UninitializedMoveNFunction {};
27}
28
29namespace di {
31}
Definition sequence.h:12
constexpr auto iterator_move
Definition iterator_move.h:56
constexpr auto uninitialized_move_n
Definition uninitialized_move_n.h:26
decltype(container::iterator_move(util::declval< T & >())) IteratorRValue
Definition iterator_rvalue.h:9
decltype(container::iterator_ssize_type(types::in_place_type< meta::RemoveCVRef< T > >)) IteratorSSizeType
Definition iterator_ssize_type.h:8
constexpr auto construct_at
Definition construct_at.h:27
Definition any_storable.h:9