13 template<
typename R,
usize index,
typename F,
typename... Args>
14 struct IndexDispatchImpl {
15 constexpr static auto do_call(F&& function, Args&&... args) -> R {
16 if constexpr (concepts::LanguageVoid<R>) {
24 template<
typename R, usize max_index>
25 struct IndexDispatch {
26 template<
typename F,
typename... Args>
27 constexpr static auto operator()(
usize index, F&& function, Args&&... args) -> R {
28 auto function_table = []<
usize... indices>(meta::ListV<indices...>) {
29 return Array<R (*)(F&&, Args&&...), max_index> { (
30 IndexDispatchImpl<R, indices, F, Args...>::do_call)... };
34 return function_table[index](di::forward<F>(function), di::forward<Args>(args)...);
39template<
typename R, usize max_index>
40requires(max_index > 0)
41constexpr inline auto index_dispatch = detail::IndexDispatch<R, max_index> {};
#define DI_ASSERT(...)
Definition assert_bool.h:7
constexpr auto invoke
Definition invoke.h:100
constexpr auto index_dispatch
Definition index_dispatch.h:41
container::Vector< Value > Array
Definition json_value.h:59
size_t usize
Definition integers.h:33
constexpr auto c_
A value of type Constexpr<val>.
Definition constexpr.h:252