32 #include <type_traits>
40 template<
bool B,
class T =
void>
47 template<
class A,
class B>
48 constexpr
bool is_same_v = std::is_same<A, B>::value;
75 template <
typename... Ts>
82 template <
typename Head,
typename... Tail>
85 static constexpr
bool value = std::is_arithmetic<Head>::value &&
all_arithmetic<Tail...>::value;
95 static constexpr
bool value = std::is_arithmetic<T>::value;
102 template<
typename... Ts>
109 template <
typename T1,
typename... Ts>
116 template <
typename T1,
typename Head,
typename... Tail>
119 static constexpr
bool value = std::is_same<T1, Head>::value &&
all_same<T1, Tail...>::value;
126 template <
typename T1,
typename T2>
129 static constexpr
bool value = std::is_same<T1, T2>::value;
136 template<
typename... Ts>
143 template<
typename dtype>
146 static constexpr
bool value = std::is_default_constructible<dtype>::value &&
147 std::is_nothrow_copy_constructible<dtype>::value &&
148 std::is_nothrow_move_constructible<dtype>::value &&
149 std::is_nothrow_copy_assignable<dtype>::value &&
150 std::is_nothrow_move_assignable<dtype>::value &&
151 std::is_nothrow_destructible<dtype>::value &&
152 !std::is_void<dtype>::value &&
153 !std::is_pointer<dtype>::value &&
154 !std::is_array<dtype>::value &&
155 !std::is_union<dtype>::value &&
156 !std::is_function<dtype>::value &&
157 !std::is_abstract<dtype>::value;
164 template<
class dtype>
174 static constexpr
bool value =
false;