Tatooine
invoke_omitted.h
Go to the documentation of this file.
1#ifndef TATOOINE_INVOKE_OMITTED_H
2#define TATOOINE_INVOKE_OMITTED_H
3
4//==============================================================================
5namespace tatooine {
6//==============================================================================
7template <typename F, typename... Params>
8constexpr decltype(auto) invoke_omitted(F&& f, Params&&... params) {
9 return std::invoke(f, std::forward<Params>(params)...);
10}
11//------------------------------------------------------------------------------
12template <size_t i, size_t... is, typename F, typename Param,
13 typename... Params>
14constexpr decltype(auto) invoke_omitted(F&& f, Param&& param,
15 Params&&... params) {
16 if constexpr (i == 0) {
17 return invoke_omitted<(is - 1)...>(
18 [&](auto&&... lparams) -> decltype(auto) {
19 return std::invoke(f, std::forward<decltype(lparams)>(lparams)...);
20 },
21 std::forward<Params>(params)...);
22 } else {
23 return invoke_omitted<i - 1, (is - 1)...>(
24 [&](auto&&... lparams) -> decltype(auto) {
25 return std::invoke(f, std::forward<Param>(param),
26 std::forward<decltype(lparams)>(lparams)...);
27 },
28 std::forward<Params>(params)...);
29 }
30}
31//==============================================================================
32} // namespace tatooine
33//==============================================================================
34#endif
Definition: algorithm.h:6
constexpr decltype(auto) invoke_omitted(F &&f, Params &&... params)
Definition: invoke_omitted.h:8