di 0.1.0
Loading...
Searching...
No Matches
uninitialized_value_construct.h
Go to the documentation of this file.
1#pragma once
2
6#include "di/meta/trivial.h"
7#include "di/util/addressof.h"
9
10namespace di::container {
11namespace detail {
12 struct UninitializedValueConstructFunction {
13 template<concepts::UninitForwardIterator Out, concepts::UninitSentinelFor<Out> OutSent>
14 requires(concepts::DefaultInitializable<meta::IteratorValue<Out>>)
15 constexpr auto operator()(Out out, OutSent out_last) const -> Out {
16 for (; out != out_last; ++out) {
17 util::construct_at(util::addressof(*out));
18 }
19 return out;
20 }
21
22 template<concepts::UninitForwardContainer Out>
23 requires(concepts::DefaultInitializable<meta::ContainerValue<Out>>)
24 constexpr auto operator()(Out&& out) const -> meta::BorrowedIterator<Out> {
25 return (*this)(container::begin(out), container::end(out));
26 }
27 };
28}
29
30constexpr inline auto uninitialized_value_construct = detail::UninitializedValueConstructFunction {};
31}
32
33namespace di {
35}
Definition sequence.h:12
constexpr auto uninitialized_value_construct
Definition uninitialized_value_construct.h:30
constexpr auto end
Definition end.h:55
constexpr auto begin
Definition begin.h:52
Conditional< concepts::BorrowedContainer< Con >, ContainerIterator< Con >, container::Dangling > BorrowedIterator
Definition borrowed_iterator.h:11
constexpr auto construct_at
Definition construct_at.h:27
Definition any_storable.h:9