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 51 of file TMP.h.

53{
54 constexpr auto tail_arg = static_cast<List<Tail...>*>(nullptr);
55 using TailFiltered = decltype(filter(pred, tail_arg));
56
57 using Result =
58 std::conditional_t<pred((Head*)nullptr),
59 Concat_t<List<Head>, TailFiltered>, TailFiltered>;
60
61 return Result{};
62}
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 145 of file TMP.h.

146{
147 (..., f((Types*)nullptr));
148}

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 119 of file TMP.h.

121{
122 return {};
123}

◆ 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 107 of file TMP.h.

109{
110 using CommonType =
111 std::common_type_t<std::invoke_result_t<Function, Head*>,
112 std::invoke_result_t<Function, Tail*>...>;
113
114 return std::array<CommonType, 1 + sizeof...(Tail)>{f((Head*)nullptr),
115 f((Tail*)nullptr)...};
116}

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