2 #include "hmbdc/Compile.hpp" 12 template <
typename ClassType,
typename ReturnType,
typename ...Args>
14 enum { arity =
sizeof...(Args) };
15 typedef ReturnType result_type;
19 using type =
typename std::tuple_element<i, std::tuple<Args...>>::type;
23 template <
typename ClassType,
typename ReturnType,
typename ...Args>
25 enum { arity =
sizeof...(Args) };
27 typedef ReturnType result_type;
31 using type =
typename std::tuple_element<i, std::tuple<Args...>>::type;
35 template <
typename Base,
typename Derived>
38 value = std::is_base_of<Base, Derived>::value
43 template <
typename T,
typename Tuple>
46 template <
typename T,
typename ...Types>
48 static const std::size_t value = 0;
53 static const std::size_t value = 0;
56 template <
typename T,
typename U,
typename ...Types>
58 static const std::size_t value = 1 +
index_in_tuple<T, std::tuple<Types...>>::value;
62 template <
typename T,
typename Tuple>
64 using type = std::tuple<T>;
67 template <
typename T,
typename ...Types>
70 using Tuple = std::tuple<Types ...>;
72 using type =
typename std::conditional<
74 , std::tuple<Types ..., T>
79 template <
typename Tuple1,
typename Tuple2>
82 template <
typename Tuple1>
87 template <
typename Tuple1,
typename T,
typename ...Types>
90 using step1 =
typename add_if_not_in_tuple<T, Tuple1>::type;
95 template <
typename Tuple>
97 static const std::size_t value = 0;
100 template <
typename T,
typename ...Ts>
105 static const std::size_t value = step1 >
sizeof(T) ? step1 :
sizeof(T);
107 template <
typename Tuple0,
typename Tuple1>
110 template <
typename ...T,
typename ...U>
112 using type = std::tuple<T..., U...>;
115 template <
template <
class,
class>
class pred,
typename T,
typename ...Ts>
117 using type = std::tuple<T>;
119 template <
template <
class,
class>
class pred,
typename T
120 ,
typename T0,
typename ...Ts>
122 using type =
typename std::conditional<
124 , std::tuple<T, T0, Ts...>
128 pred, T, std::tuple<Ts...>
134 template <
template <
class,
class>
class pred,
typename Tuple>
137 template <
template <
class,
class>
class pred>
139 using type = std::tuple<>;
142 template <
template <
class,
class>
class pred,
typename T,
typename ...Ts>
147 ,
typename sort_tuple<pred, std::tuple<Ts...>>::type
151 #if __GNUC_PREREQ(9,0) 152 template <typename Tuple, size_t from = 0, size_t to = std::tuple_size<Tuple>::value>
153 struct bsearch_tuple;
155 template <
typename ...Ts,
size_t from,
size_t to>
156 struct bsearch_tuple<std::tuple<Ts...>, from, to> {
157 template <
typename comp>
158 bool operator()(comp&& c) {
159 if constexpr (from >= to) {
162 constexpr
auto at = (from + to) / 2;
163 using atType =
typename std::tuple_element<at, std::tuple<Ts...>>::type;
168 else if (comp_res < 0)
169 return bsearch_tuple<std::tuple<Ts...>, from, at>()(
170 std::forward<comp>(c));
172 return bsearch_tuple<std::tuple<Ts...>, at + 1, to>()(
173 std::forward<comp>(c));
178 template <
template <
class>
class target_template,
typename M>
179 constexpr
bool is_template =
false;
181 template <
template <
class>
class target_template,
typename N>
182 constexpr
bool is_template<target_template, target_template<N>> =
true;
186 template <
template <
class>
class target_template,
typename Tuple>
188 using type = std::tuple<>;
191 template <
template <
class>
class target_template,
typename T,
typename ...Ts>
197 template <
template <
class>
class target_template,
typename T,
typename ...Ts>
204 template <
template <
class>
class target_template,
typename Tuple>
206 using type = std::tuple<>;
209 template <
template <
class>
class target_template,
typename T,
typename ...Ts>
216 template <
template <
class>
class target_template,
typename T,
typename ...Ts>
221 template<
typename T,
size_t sz>
222 size_t length_of(T (&)[sz]) {
return sz; }
Definition: MetaUtils.hpp:80
Definition: MetaUtils.hpp:116
Definition: MetaUtils.hpp:135
Definition: MetaUtils.hpp:44
Definition: MetaUtils.hpp:36
Definition: MetaUtils.hpp:205
Definition: MetaUtils.hpp:108
Definition: MetaUtils.hpp:63
Definition: MetaUtils.hpp:96
Definition: MetaUtils.hpp:187
Definition: MetaUtils.hpp:9