5 #ifndef VCCC_TUPLE_TUPLE_LIKE_HPP
6 #define VCCC_TUPLE_TUPLE_LIKE_HPP
11 #include <type_traits>
23 template<
typename T,
typename =
void>
24 struct has_tuple_size : std::false_type {};
27 struct has_tuple_size<T,
void_t<
std::tuple_size<T>>> : std::true_type {};
30 struct tuple_size_equal_to :
bool_constant<std::tuple_size<T>::value == X> {};
32 template<
typename T, std::
size_t X>
33 struct tuple_size_equal_to<T, X, false> : std::false_type {};
36 struct tuple_size_greater_than :
bool_constant<(std::tuple_size<T>::value > X)> {};
38 template<
typename T, std::
size_t X>
39 struct tuple_size_greater_than<T, X, false> : std::false_type {};
42 struct tuple_size_less_than :
bool_constant<(std::tuple_size<T>::value < X)> {};
44 template<typename T, std::size_t X>
45 struct tuple_size_less_than<T, X, false> : std::false_type {};
48 struct tuple_like_uncvref : std::false_type {};
51 template<typename T, std::size_t N>
52 struct tuple_like_uncvref<std::array<T, N>> : std::true_type {};
54 template<typename T, typename U>
55 struct tuple_like_uncvref<std::pair<T, U>> : std::true_type {};
57 template<typename ...T>
58 struct tuple_like_uncvref<std::tuple<T...>> : std::true_type {};
92 struct tuple_like : internal::tuple_like_uncvref<remove_cvref_t<T>> {};
101 template<typename T, std::size_t N>
102 struct sized_tuple_like
105 internal::tuple_size_equal_to<T, N>
116 using pair_like = sized_tuple_like<T, 2>;
std::integral_constant< bool, v > bool_constant
Definition: bool_constant.hpp:19
Definition: matrix.hpp:495
Definition: directory.h:12
constexpr VCCC_INLINE_OR_STATIC detail::element_niebloid< 1 > value
Definition: key_value.hpp:35