diff --git a/src/include/units/bits/external/type_list.h b/src/include/units/bits/external/type_list.h index 422bb00f..4126738e 100644 --- a/src/include/units/bits/external/type_list.h +++ b/src/include/units/bits/external/type_list.h @@ -73,6 +73,25 @@ namespace units { template using type_list_push_back = detail::type_list_push_back_impl::type; + // join + + namespace detail { + + template + struct type_list_join_impl { + using type = List; + }; + + template typename List, typename... First, typename... Second, typename... Rest> + struct type_list_join_impl, List, Rest...> { + using type = type_list_join_impl, Rest...>::type; + }; + + } + + template + using type_list_join = detail::type_list_join_impl::type; + // split namespace detail { diff --git a/test/unit_test/static/type_list_test.cpp b/test/unit_test/static/type_list_test.cpp index 45221d56..c29f0c54 100644 --- a/test/unit_test/static/type_list_test.cpp +++ b/test/unit_test/static/type_list_test.cpp @@ -44,6 +44,15 @@ static_assert(std::is_same_v, int>, type_list, int, long, double>, type_list>); static_assert(std::is_same_v, int, long>, type_list>); +static_assert(std::is_same_v>, type_list<>>); +static_assert(std::is_same_v, type_list<>>, type_list<>>); +static_assert(std::is_same_v, type_list<>, type_list<>>, type_list<>>); +static_assert(std::is_same_v, type_list<>, type_list<>>, type_list>); +static_assert(std::is_same_v, type_list, type_list<>>, type_list>); +static_assert(std::is_same_v, type_list<>, type_list>, type_list>); +static_assert(std::is_same_v, type_list, type_list>, type_list>); +static_assert(std::is_same_v, type_list, type_list>, type_list>); + // type_list_split static_assert(std::is_same_v, 0>::first_list, type_list<>>);