Iros
 
Loading...
Searching...
No Matches
tuple_transform.h
Go to the documentation of this file.
1#pragma once
2
8
9namespace di::vocab {
10namespace detail {
11 template<typename F, typename Tup, typename Ind>
13
14 template<size_t... indices, typename F, typename Tup>
15 struct TupleTransformValid<F, Tup, meta::ListV<indices...>> {
17 };
18}
19
20template<typename F, concepts::TupleLike Tup>
22constexpr auto tuple_transform(F&& function, Tup&& tuple) {
23 return apply(
24 [&]<typename... Types>(Types&&... values) {
25 return Tuple<meta::InvokeResult<F&, Types>...>(function::invoke(function, util::forward<Types>(values))...);
26 },
27 util::forward<Tup>(tuple));
28}
29}
30
31namespace di {
33}
Definition tuple_forward_declaration.h:5
Definition invoke.h:58
Definition as_bool.h:8
constexpr auto invoke
Definition invoke.h:100
Definition merge_interfaces.h:6
Definition erasure_cast.h:7
Definition lazy.h:165
constexpr auto tuple_transform(F &&function, Tup &&tuple)
Definition tuple_transform.h:22
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
Definition zstring_parser.h:9
Definition tuple_transform.h:12
static constexpr bool value
Definition tuple_transform.h:16