18 lines
664 B
C++
18 lines
664 B
C++
|
|
#pragma once
|
||
|
|
|
||
|
|
#include "serif/utils/misc/concepts/concat.hpp"
|
||
|
|
#include "serif/utils/types/type_list.hpp"
|
||
|
|
|
||
|
|
namespace serif::utils::misc::concepts {
|
||
|
|
// Might make sense to rename these to FlatMap or some such
|
||
|
|
template <typename TypeList, template <typename> typename Descriptor>
|
||
|
|
struct EnumerateTypes;
|
||
|
|
|
||
|
|
template <template <typename> typename Descriptor, typename... TypeTs>
|
||
|
|
struct EnumerateTypes<types::TypeList<TypeTs...>, Descriptor> {
|
||
|
|
using Type = ConcatT<Descriptor<TypeTs>...>;
|
||
|
|
};
|
||
|
|
|
||
|
|
template <typename TypeList, template <typename> typename Descriptor>
|
||
|
|
using EnumerateTypesT = EnumerateTypes<TypeList, Descriptor>::Type;
|
||
|
|
}
|