5 #ifndef VCCC_RANGES_RANGE_KEY_T_HPP
6 #define VCCC_RANGES_RANGE_KEY_T_HPP
19 template<
typename T,
typename =
void>
20 struct has_first_type : std::false_type {};
22 struct has_first_type<T,
void_t<typename T::first_type>> : std::true_type {};
24 template<
typename T,
typename =
void>
25 struct has_first_tuple_element : std::false_type {};
27 struct has_first_tuple_element<T,
void_t<
std::tuple_element_t<0, T>>> : std::true_type {};
31 template<
typename RV,
bool v>
32 struct guide_key<RV, true, v> {
33 using type = std::remove_const_t< typename RV::first_type >;
36 struct guide_key<RV, false, true> {
37 using type = std::remove_const_t< std::tuple_element_t<0, RV> >;
41 struct range_key_impl {};
43 struct range_key_impl<R, true> : guide_key<range_value_t<R>> {};
typename range_key< R >::type range_key_t
Definition: range_key_t.hpp:55
Definition: matrix.hpp:495
Definition: directory.h:12
constexpr VCCC_INLINE_OR_STATIC detail::element_niebloid< 1 > value
Definition: key_value.hpp:35
Definition: range_key_t.hpp:48