Iros
 
Loading...
Searching...
No Matches
make_deferred.h
Go to the documentation of this file.
1#pragma once
2
4#include "di/meta/util.h"
5#include "di/types/prelude.h"
8
9namespace di::function {
10namespace detail {
11 template<typename T, typename... Args>
13 public:
15
18
19 template<typename... Values>
21 constexpr explicit MakeDeferredFunctor(InPlace, Values&&... values)
22 : m_args(util::forward<Values>(values)...) {}
23
26
27 constexpr auto operator()() & -> T
28 requires concepts::ConstructibleFrom<T, Args&...>
29 {
30 return vocab::make_from_tuple<T>(m_args);
31 }
32
33 constexpr auto operator()() const& -> T
34 requires concepts::ConstructibleFrom<T, Args const&...>
35 {
36 return vocab::make_from_tuple<T>(m_args);
37 }
38
39 constexpr auto operator()() && -> T
40 requires concepts::ConstructibleFrom<T, Args&&...>
41 {
42 return vocab::make_from_tuple<T>(util::move(m_args));
43 }
44
45 constexpr auto operator()() const&& -> T
46 requires concepts::ConstructibleFrom<T, Args const&&...>
47 {
48 return vocab::make_from_tuple<T>(util::move(m_args));
49 }
50
51 private:
52 vocab::Tuple<Args...> m_args;
53 };
54
55 template<typename T>
57 template<concepts::DecayConstructible... Args>
58 constexpr auto operator()(Args&&... args) const {
59 return MakeDeferredFunctor<T, meta::Decay<Args>...>(in_place, util::forward<Args>(args)...);
60 }
61 };
62}
63
74template<typename T>
76}
77
78namespace di {
80}
Definition make_deferred.h:12
auto operator=(MakeDeferredFunctor const &) -> MakeDeferredFunctor &=delete
MakeDeferredFunctor(MakeDeferredFunctor const &)=default
constexpr auto operator()() const &-> T
Definition make_deferred.h:33
MakeDeferredFunctor(MakeDeferredFunctor &&)=default
constexpr auto operator()() &-> T
Definition make_deferred.h:27
auto operator=(MakeDeferredFunctor &&) -> MakeDeferredFunctor &=delete
constexpr auto operator()() &&-> T
Definition make_deferred.h:39
constexpr auto operator()() const &&-> T
Definition make_deferred.h:45
Definition tuple_forward_declaration.h:5
Definition operations.h:11
Definition any_storable.h:9
Definition bind_back.h:16
Definition as_bool.h:8
constexpr auto make_deferred
Creates a deferred function object.
Definition make_deferred.h:75
Definition vocab.h:96
constexpr auto make_from_tuple
Definition make_from_tuple.h:31
Definition zstring_parser.h:9
constexpr auto in_place
Definition in_place.h:8
@ T
Definition key.h:29
Definition make_deferred.h:56
constexpr auto operator()(Args &&... args) const
Definition make_deferred.h:58
Definition in_place.h:4