OGS
BaseLib::TMP::detail Namespace Reference

Functions

template<typename Pred, template< typename... > typename SomeListOfTypes>
constexpr List filter (Pred, SomeListOfTypes<> *)
template<typename Pred, template< typename... > typename SomeListOfTypes, typename Head, typename... Tail>
constexpr decltype(auto) filter (Pred pred, SomeListOfTypes< Head, Tail... > *)
template<template< typename... > typename List, typename Function, typename Head, typename... Tail>
constexpr decltype(auto) map_to_array (Function &&f, List< Head, Tail... > *)
template<template< typename... > typename List, typename Function>
constexpr std::array< std::nullptr_t, 0 > map_to_array (Function &&, List<> *)
template<template< typename... > typename List, typename Function, typename... Types>
void foreach (Function &&f, List< Types... > *)

Function Documentation

◆ filter() [1/2]

template<typename Pred, template< typename... > typename SomeListOfTypes, typename Head, typename... Tail>
decltype(auto) BaseLib::TMP::detail::filter ( Pred pred,
SomeListOfTypes< Head, Tail... > *  )
constexpr

Definition at line 49 of file TMP.h.

50{
51 constexpr auto tail_arg = static_cast<List<Tail...>*>(nullptr);
52 using TailFiltered = decltype(filter(pred, tail_arg));
53
54 using Result =
55 std::conditional_t<pred((Head*)nullptr),
56 Concat_t<List<Head>, TailFiltered>, TailFiltered>;
57
58 return Result{};
59}
constexpr List filter(Pred, SomeListOfTypes<> *)
Definition TMP.h:42
typename Concat< List1, List2 >::type Concat_t
Definition TMP.h:30
A list of types.
Definition TMP.h:36

References BaseLib::TMP::filter().

◆ filter() [2/2]

template<typename Pred, template< typename... > typename SomeListOfTypes>
List BaseLib::TMP::detail::filter ( Pred ,
SomeListOfTypes<> *  )
constexpr

Definition at line 42 of file TMP.h.

43{
44 return {};
45}

Referenced by BaseLib::TMP::filter().

◆ foreach()

template<template< typename... > typename List, typename Function, typename... Types>
void BaseLib::TMP::detail::foreach ( Function && f,
List< Types... > *  )

Definition at line 137 of file TMP.h.

138{
139 (..., f((Types*)nullptr));
140}

Referenced by BaseLib::TMP::foreach().

◆ map_to_array() [1/2]

template<template< typename... > typename List, typename Function>
std::array< std::nullptr_t, 0 > BaseLib::TMP::detail::map_to_array ( Function && ,
List<> *  )
constexpr

Definition at line 113 of file TMP.h.

114{
115 return {};
116}

◆ map_to_array() [2/2]

template<template< typename... > typename List, typename Function, typename Head, typename... Tail>
decltype(auto) BaseLib::TMP::detail::map_to_array ( Function && f,
List< Head, Tail... > *  )
constexpr

Definition at line 102 of file TMP.h.

103{
104 using CommonType =
105 std::common_type_t<std::invoke_result_t<Function, Head*>,
106 std::invoke_result_t<Function, Tail*>...>;
107
108 return std::array<CommonType, 1 + sizeof...(Tail)>{f((Head*)nullptr),
109 f((Tail*)nullptr)...};
110}

Referenced by BaseLib::TMP::map_to_array().