Skip to content

Latest commit

 

History

History
40 lines (32 loc) · 1.06 KB

GroupBy.md

File metadata and controls

40 lines (32 loc) · 1.06 KB

<CppML/Algorithm/GroupBy.hpp>

GroupBy

template <typename By, typename Pipe = ml::ToList>
struct GroupBy {
  template <typename ...Ts>
  using f = /* .... */;
};

GroupBy<By, Pipe>

GroupBy<By, Pipe> is a metafunction that passes to Pipe a parameter pack ml::ListT<Us...>..., where each list in it consists of Us..., types which evaluate to the same type when mapped by By. Formally speaking, GroupBy<By, Pipe> forms equivalence classes of Ts... under By. Pipe defaults to ml::ToList.

f:: Ts... -> ml::ListT<Us...>... >-> Pipe

By

By can be any metafunction returning a single type.

f:: T -> U

Example

using T0 = ml::f<
                 ml::GroupBy<ml::AlignOf<>>,
                 int, char, float, bool, double>;
static_assert(
              std::is_same_v<
                  T,
                  ml::ListT<
                      ml::ListT<int, float>,
                      ml::ListT<char, bool>,
                      ml::ListT<double>>>);