Iros
 
Loading...
Searching...
No Matches
tuple_sequence.h
Go to the documentation of this file.
1#pragma once
2
7
8namespace di::vocab {
9namespace detail {
10 template<typename R>
12 template<typename F, concepts::TupleLike T>
13 constexpr auto operator()(F&& function, T&& tuple) const -> R {
14 return vocab::apply(
15 [&](auto&&... args) {
16 return helper(function, util::forward<decltype(args)>(args)...);
17 },
18 util::forward<T>(tuple));
19 }
20
21 private:
22 template<typename F>
23 constexpr static auto helper(F&&) -> R {
24 return R();
25 }
26
27 template<typename F, typename T, typename... Ts>
28 constexpr static auto helper(F&& function, T&& value, Ts&&... values) -> R {
29 DI_TRY(function::invoke(function, util::forward<T>(value)));
30 return helper(function, util::forward<Ts>(values)...);
31 }
32 };
33}
34
35template<typename R>
37}
38
39namespace di {
41}
#define DI_TRY(...)
Definition monad_try.h:13
Definition as_bool.h:8
constexpr auto invoke
Definition invoke.h:100
Definition erasure_cast.h:7
Definition lazy.h:165
constexpr auto apply(F &&f, Tup &&tuple) -> decltype(detail::apply_impl(meta::MakeIndexSequence< meta::TupleSize< Tup > > {}, util::forward< F >(f), util::forward< Tup >(tuple)))
Definition apply.h:22
constexpr auto tuple_sequence
Definition tuple_sequence.h:36
Definition zstring_parser.h:9
Definition tuple_sequence.h:11
constexpr auto operator()(F &&function, T &&tuple) const -> R
Definition tuple_sequence.h:13