template <typename F, typename Pipe = ml::ToList>
struct Map {
template <typename ...Ts>
using f = /* .... */;
};Map<F, Pipe> is a metafunction that passes to Pipe the parameter pack Us..., which is generated by applying F to each element of Ts.... Pipe defaults to ml::ToList.
f:: Ts... -> F(Ts)... >-> Pipeusing T = ml::f<
ml::Map<
ml::IsClass<>>,
int, std::string, char>;
static_assert(
std::is_same_v<
T,
ml::ListT<
ml::Bool<false>, ml::Bool<true>, ml::Bool<false>>>);