15#include <AUI/Traits/concepts.h>
19 template<
typename First,
typename... Up>
63 namespace parameter_pack {
64 template<
typename Callable,
typename... Args>
67 c(std::forward<Args>(
args));
71 template<
typename... Types>
75 template<
typename... Args>
78 template<
typename... Args>
93 template<
typename Callable>
95 (..., c.template operator()<Args>());
110 template<
typename Callable>
112 return c.template operator()<Args...>();
127 template<
typename Callable>
129 return for_each_make_tuple_impl<Callable&&, Args...>(std::forward<Callable>(c));
133 template<
typename Callable,
typename First,
typename... Remaining>
134 static auto for_each_make_tuple_impl(Callable&& c) {
135 auto x = c.template operator()<First>();
136 return std::tuple_cat(std::make_tuple(std::move(x)),
137 for_each_make_tuple_impl<Callable&&, Remaining...>(std::forward<Callable>(c)));
139 template<
typename Callable>
140 static auto for_each_make_tuple_impl(Callable&& c) {
141 return std::make_tuple();
Invokable concept.
Definition: concepts.h:36
API_AUI_CORE const ACommandLineArgs & args() noexcept
Definition: OSAndroid.cpp:29
Definition: parameter_pack.h:20
static auto for_each_make_tuple(Callable &&c)
Visit types (not values) of the tuple, passing each element as single template argument....
Definition: parameter_pack.h:128
static auto for_each_all(Callable &&c)
Visit types (not values) of the tuple, passing each element as template arguments.
Definition: parameter_pack.h:111
static void for_each_single(Callable &&c)
Visit types (not values) of the tuple, passing each element as single template arguments.
Definition: parameter_pack.h:94
Definition: parameter_pack.h:76