Iros
 
Loading...
Searching...
No Matches
apply.h
Go to the documentation of this file.
1#pragma once
2
4#include "di/meta/algorithm.h"
5#include "di/types/size_t.h"
6#include "di/util/forward.h"
7#include "di/util/get.h"
10
11namespace di::vocab {
12namespace detail {
13 template<types::size_t... indices, typename F, concepts::TupleLike Tup>
14 constexpr auto apply_impl(meta::ListV<indices...>, F&& f, Tup&& tuple)
15 -> decltype(function::invoke(util::forward<F>(f), util::get<indices>(util::forward<Tup>(tuple))...)) {
16 // NOLINTNEXTLINE(bugprone-use-after-move)
17 return function::invoke(util::forward<F>(f), util::get<indices>(util::forward<Tup>(tuple))...);
18 }
19}
20
21template<typename F, concepts::TupleLike Tup>
22constexpr auto apply(F&& f, Tup&& tuple)
23 -> decltype(detail::apply_impl(meta::MakeIndexSequence<meta::TupleSize<Tup>> {}, util::forward<F>(f),
24 util::forward<Tup>(tuple))) {
26 util::forward<Tup>(tuple));
27}
28}
29
30namespace di {
31using vocab::apply;
32}
concept F
Definition zip_transform.h:12
constexpr auto invoke
Definition invoke.h:100
constexpr auto TupleSize
Definition tuple_size.h:23
MakeIntegerSequence< usize, count > MakeIndexSequence
Definition algorithm.h:285
std::size_t size_t
Definition size_t.h:12
constexpr auto get(T &&value) -> decltype(auto)
Definition get.h:8
Definition erasure_cast.h:7
constexpr auto apply_impl(meta::ListV< indices... >, F &&f, Tup &&tuple) -> decltype(function::invoke(util::forward< F >(f), util::get< indices >(util::forward< Tup >(tuple))...))
Definition apply.h:14
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
Definition zstring_parser.h:9
Definition core.h:8