31 #include <type_traits>
39 template<
bool B,
class T =
void>
46 template<
class A,
class B>
47 constexpr
bool is_same_v = std::is_same<A, B>::value;
74 template <
typename... Ts>
81 template <
typename Head,
typename... Tail>
84 static constexpr
bool value = std::is_arithmetic<Head>::value &&
all_arithmetic<Tail...>::value;
94 static constexpr
bool value = std::is_arithmetic<T>::value;
101 template<
typename... Ts>
108 template <
typename T1,
typename... Ts>
115 template <
typename T1,
typename Head,
typename... Tail>
118 static constexpr
bool value = std::is_same<T1, Head>::value &&
all_same<T1, Tail...>::value;
125 template <
typename T1,
typename T2>
128 static constexpr
bool value = std::is_same<T1, T2>::value;
135 template<
typename... Ts>
142 template<
typename dtype>
145 static constexpr
bool value = std::is_default_constructible<dtype>::value &&
146 std::is_nothrow_copy_constructible<dtype>::value &&
147 std::is_nothrow_move_constructible<dtype>::value &&
148 std::is_nothrow_copy_assignable<dtype>::value &&
149 std::is_nothrow_move_assignable<dtype>::value &&
150 std::is_nothrow_destructible<dtype>::value &&
151 !std::is_void<dtype>::value &&
152 !std::is_pointer<dtype>::value &&
153 !std::is_array<dtype>::value &&
154 !std::is_union<dtype>::value &&
155 !std::is_function<dtype>::value &&
156 !std::is_abstract<dtype>::value;
163 template<
class dtype>
173 static constexpr
bool value =
false;