diff --git a/src/include/units/bits/external/type_list.h b/src/include/units/bits/external/type_list.h index 88ab7b1e..530520b8 100644 --- a/src/include/units/bits/external/type_list.h +++ b/src/include/units/bits/external/type_list.h @@ -111,14 +111,18 @@ struct split_impl { }; template typename List, std::size_t Idx, std::size_t N, typename T, typename... Rest> + requires (Idx < N) struct split_impl : split_impl { using base = split_impl; - using first_list = conditional::type, - typename base::first_list>; - using second_list = conditional::type>; + using first_list = TYPENAME type_list_push_front_impl::type; + using second_list = TYPENAME base::second_list; +}; + +template typename List, std::size_t Idx, std::size_t N, typename T, typename... Rest> +struct split_impl : split_impl { + using base = split_impl; + using first_list = TYPENAME base::first_list; + using second_list = TYPENAME type_list_push_front_impl::type; }; } // namespace detail @@ -165,15 +169,18 @@ struct type_list_merge_sorted_impl, List, Pred> { using type = List; }; + +template typename List, typename Lhs1, typename... LhsRest, typename Rhs1, typename... RhsRest, + template typename Pred> + requires Pred::value +struct type_list_merge_sorted_impl, List, Pred> { + using type = TYPENAME type_list_push_front_impl, List, Pred>::type, Lhs1>::type; +}; + template typename List, typename Lhs1, typename... LhsRest, typename Rhs1, typename... RhsRest, template typename Pred> struct type_list_merge_sorted_impl, List, Pred> { - using type = conditional< - Pred::value, - typename type_list_push_front_impl< - typename type_list_merge_sorted_impl, List, Pred>::type, Lhs1>::type, - typename type_list_push_front_impl< - typename type_list_merge_sorted_impl, List, Pred>::type, Rhs1>::type>; + using type = TYPENAME type_list_push_front_impl, List, Pred>::type, Rhs1>::type; }; } // namespace detail