xieite ::type_list {}
Defined in header <xieite/meta/type_list.hpp>
A metaprogramming utility for storing and manipulating a list of types. Does not use recursion at all!
Definition
template <typename... Ts >struct type_list {static constexpr std ::size_t size =sizeof... (Ts );template <auto cond >static constexpr bool all =xieite ::is_satisfd_all <cond ,Ts ...>;template <auto cond >static constexpr bool any =xieite ::is_satisfd_any <cond ,Ts ...>;template <typename T ,auto cmp =/* []??? {} */ >static constexpr bool has = (... ||xieite ::is_satisfd <cmp ,T ,Ts >);template <std ::size_t idx >using at =/* Ts...[idx] */ ;template <auto cond >requires (xieite ::is_satisfd_any <cond ,Ts ...>)static constexpr std ::size_t find_idx =/* ??? */ ;template <typename T ,auto cmp =/* []??? {} */ >requires (xieite ::type_list <Ts ...>::has <T ,cmp >)static constexpr std ::size_t idx_of =/* ??? */ ;template <auto cond >requires (xieite ::is_satisfd_any <cond ,Ts ...>)using find =/* ??? */ ;static constexpr auto apply (auto&& ,auto&&... )XIEITE_ARROW (/* ??? */ )template <auto fn >static constexpr bool satisf =xieite ::is_satisfd <fn ,Ts ...>;template <template <typename... >typename M >using to =M <Ts ...>;template <typename Ret >using as_fn =/* Ret(Ts...) */ ;template <typename... Us >using append =xieite ::type_list <Ts ...,Us ...>;template <typename List >using append_range =/* xieite::type_list<Ts..., ???> */ ;template <typename... Us >using prepend =xieite ::type_list <Us ...,Ts ...>;template <typename List >using prepend_range =/* xieite::type_list<???, Ts...> */ ;template <xieite ::end ... >using reverse =/* xieite::type_list<???> */ ;template <std ::size_t start ,std ::size_t end =sizeof... (Ts )>using slice =/* xieite::type_list<???> */ ;template <std ::size_t start ,std ::size_t end =start +1 >using erase =/* xieite::type_list<???> */ ;template <std ::size_t start ,std ::size_t end ,typename... Us >using replace =/* xieite::type_list<???> */ ;template <std ::size_t start ,std ::size_t end ,typename List >using replace_range =/* xieite::type_list<???> */ ;template <std ::size_t idx ,typename... Us >using insert =xieite ::type_list <Ts ...>::replace <idx ,idx ,Us ...>;template <std ::size_t idx ,typename List >using insert_range =xieite ::type_list <Ts ...>::replace_range <idx ,idx ,List >;template <std ::size_t idx ,typename T >using set =xieite ::type_list <Ts ...>::replace <idx ,idx +1 ,T >;template <std ::size_t idx0 ,std ::size_t idx1 >using swap =/* xieite::type_list<???> */ ;template <std ::size_t start0 ,std ::size_t end0 ,std ::size_t start1 ,std ::size_t end1 >using swap_slices =/* xieite::type_list<???> */ ;template <std ::size_t ... idxs >using arrange =xieite ::type_list <xieite ::type_list <Ts ...>::at <idxs >...>;template <auto cond >using filter =/* xieite::type_list<???> */ ;template <auto cmp =/* []??? {} */ >using dedup =/* xieite::type_list<???> */ ;template <std ::size_t n >using repeat =/* xieite::type_list<???> */ ;template <std ::size_t arity ,auto fn >requires (!(sizeof... (Ts ) %arity ))using xform =/* xieite::type_list<???> */ ;template <std ::size_t arity ,auto fn >requires (!(sizeof... (Ts ) %arity ))using xform_flat =/* xieite::type_list<???> */ ;template <typename... Us >requires (sizeof... (Ts ) ==sizeof... (Us ))using zip =/* xieite::type_list<???> */ ;template <typename List >using zip_range =/* xieite::type_list<???> */ ; };
Example
Possible output:int main () {using List =xieite ::type_list <int ,char > ::append <float ,double > ::reverse <> ::erase <2 >;xieite ::dump (xieite ::name <List >()); }
[View in Compiler Explorer]xieite::type_list<double, float, int>