di 0.1.0
Loading...
Searching...
No Matches
uninitialized_default_construct_n.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 UninitializedDefaultConstructNFunction {
13 template<concepts::UninitForwardIterator Out>
14 requires(concepts::DefaultInitializable<meta::IteratorValue<Out>>)
15 constexpr auto operator()(Out out, meta::IteratorSSizeType<Out> n) const -> Out {
16 if constexpr (concepts::TriviallyDefaultConstructible<meta::IteratorValue<Out>>) {
17 return container::next(out, n);
18 }
19
20 for (; n > 0; --n, ++out) {
21 util::default_construct_at(util::addressof(*out));
22 }
23 return out;
24 }
25 };
26}
27
28constexpr inline auto uninitialized_default_construct_n = detail::UninitializedDefaultConstructNFunction {};
29}
30
31namespace di {
33}
Definition sequence.h:12
constexpr auto next
Definition next.h:35
constexpr auto uninitialized_default_construct_n
Definition uninitialized_default_construct_n.h:28
decltype(container::iterator_ssize_type(types::in_place_type< meta::RemoveCVRef< T > >)) IteratorSSizeType
Definition iterator_ssize_type.h:8
constexpr auto default_construct_at
Definition default_construct_at.h:27
Definition any_storable.h:9