di 0.1.0
Loading...
Searching...
No Matches
uninitialized_copy_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 UninitializedCopyNFunction {
13 template<concepts::InputIterator It, concepts::UninitForwardIterator Out,
14 concepts::UninitSentinelFor<Out> OutSent>
15 requires(concepts::ConstructibleFrom<meta::IteratorValue<Out>, meta::IteratorReference<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), *in);
20 }
21 return { util::move(in), util::move(out) };
22 }
23 };
24}
25
26constexpr inline auto uninitialized_copy_n = detail::UninitializedCopyNFunction {};
27}
28
29namespace di {
31}
Definition sequence.h:12
constexpr auto uninitialized_copy_n
Definition uninitialized_copy_n.h:26
decltype(container::iterator_ssize_type(types::in_place_type< meta::RemoveCVRef< T > >)) IteratorSSizeType
Definition iterator_ssize_type.h:8
decltype(*util::declval< T const & >()) IteratorReference
Definition iterator_reference.h:7
constexpr auto construct_at
Definition construct_at.h:27
Definition any_storable.h:9