GuillaumeDua / CppShelf

Collection of powerfuls - C++ Single-Header Libraries Files
https://guillaumedua.github.io/CppShelf/
MIT License
9 stars 1 forks source link

[mp] take_front_n / subpack #168

Open GuillaumeDua opened 7 months ago

GuillaumeDua commented 7 months ago
// take_n / take_front_n / subpack / shorten
template <std::size_t, typename>
class take_n;
template <std::size_t N, template <typename ...> typename pack, typename ... Ts>
class take_n<N, pack<Ts...>>{

    static_assert(N <= sizeof...(Ts));
    template <std::size_t ... indexes>
    constexpr static auto impl(std::index_sequence<indexes...>)
        -> pack<std::tuple_element_t<indexes, std::tuple<Ts...>>...>;

public:
    using type = decltype(impl(std::make_index_sequence<N>{}));
};
template <std::size_t N, typename T>
using take_n_t = take_n<N, T>::type;