58 #ifndef AMESOS2_META_HPP
59 #define AMESOS2_META_HPP
61 #include <type_traits>
63 #include "Amesos2_config.h"
84 template <
bool b1,
bool b2>
85 struct or_ :
public std::false_type {};
88 struct or_<true,b> :
public std::true_type {};
91 struct or_<b,true> :
public std::true_type {};
94 template <
bool b1,
bool b2>
95 struct and_ :
public std::false_type {};
98 struct and_<true,true> :
public std::true_type {};
105 struct not_<true> : std::false_type {};
108 struct not_<false> : std::true_type {};
116 template <
typename Head,
typename Tail>
118 typedef type_list<Head,Tail> type;
134 template <
typename T1>
136 : type_list<T1,nil_t>
139 template <
typename T1,
typename T2>
141 : type_list<T1,type_list<T2,nil_t> >
144 template <
typename T1,
typename T2,
typename T3>
146 : type_list<T1, type_list<T2, type_list<T3,nil_t> > >
149 template <
typename T1,
typename T2,
typename T3,
typename T4>
151 : type_list<T1, type_list<T2, type_list<T3, type_list<T4,nil_t> > > >
154 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5>
156 : type_list<T1, type_list<T2, type_list<T3, type_list<T4, type_list<T5,nil_t> > > > >
159 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
typename T6>
161 : type_list<T1, type_list<T2, type_list<T3, type_list<T4, type_list<T5, type_list<T6,nil_t> > > > > >
184 template <
typename list,
typename elem>
185 struct type_list_contains {
186 static const bool value = std::conditional_t<
187 std::is_same_v<typename list::head, elem>,
189 type_list_contains<typename list::tail,elem>
194 template <
typename elem>
195 struct type_list_contains<nil_t,elem> {
196 static const bool value =
false;
205 #endif // AMESOS2_META_HPP