30 #ifndef BASE_TYPETRAITS_HH
31 #define BASE_TYPETRAITS_HH
34 #include <type_traits>
55 template<
typename C,
typename R,
class... A>
62 template<
typename C,
typename R,
class... A>
69 template<
typename C,
typename R,
class... A>
76 template<
typename C,
typename R,
class... A>
97 template <
typename,
typename =
void>
100 template <
typename T>
102 std::void_t<decltype(begin(std::declval<T>())),
103 decltype(end(std::declval<T>()))>>: std::true_type {};
105 template <
typename T>
109 template <
typename,
typename =
void>
112 template <
typename T>
114 std::void_t<decltype(std::hash<T>())>>: std::true_type {};
116 template <
typename T>
121 #endif // BASE_TYPETRAITS_HH