21 #ifndef OPENKALMAN_RANGES_RANGE_CONCEPTS_HPP 22 #define OPENKALMAN_RANGES_RANGE_CONCEPTS_HPP 24 #ifndef __cpp_lib_ranges 28 #include "range-access.hpp" 38 template<
typename T,
typename =
void>
42 struct is_range<T,
std::void_t<iterator_t<T>, sentinel_t<T>>> : std::true_type {};
54 namespace detail_borrowed_range
56 #ifdef __cpp_lib_remove_cvref 57 using std::remove_cvref_t;
61 template<
typename R,
typename =
void>
66 (std::is_lvalue_reference_v<R> or enable_borrowed_range<remove_cvref_t<R>>)>> : std::true_type {};
79 template<
typename T,
typename =
void>
83 struct is_sized_range<T,
std::void_t<decltype(ranges::size(std::declval<T&>()))>> : std::true_type {};
97 template<
typename T,
typename =
void>
115 template<
typename R,
typename T,
typename =
void>
118 template<
typename R,
typename T>
123 template<
typename R,
typename T>
133 template<
typename T,
typename =
void>
151 template<
typename T,
typename =
void>
169 template<
typename T,
typename =
void>
187 template<
typename T,
typename =
void>
191 struct is_common_range<T,
std::enable_if_t<std::is_same_v<iterator_t<T>, sentinel_t<T>>>> : std::true_type {};
204 template<
typename R, std::enable_if_t<sized_range<R>,
int> = 0>
205 using range_size_t = decltype(
size(std::declval<R&>()));
207 template<
typename R, std::enable_if_t<range<R>,
int> = 0>
208 using range_difference_t = iter_difference_t<iterator_t<R>>;
210 template<
typename R, std::enable_if_t<range<R>,
int> = 0>
211 using range_value_t = iter_value_t<iterator_t<R>>;
214 template<
typename R, std::enable_if_t<range<R>,
int> = 0>
215 using range_reference_t = iter_reference_t<iterator_t<R>>;
217 template<
typename R, std::enable_if_t<range<R>,
int> = 0>
218 using range_const_reference_t = iter_const_reference_t<iterator_t<R>>;
220 template<
typename R, std::enable_if_t<range<R>,
int> = 0>
221 using range_rvalue_reference_t = iter_rvalue_reference_t<iterator_t<R>>;
223 template<
typename R, std::enable_if_t<range<R>,
int> = 0>
224 using range_common_reference_t = iter_common_reference_t<iterator_t<R>>;
231 #endif //OPENKALMAN_RANGES_RANGE_CONCEPTS_HPP Definition: range-concepts.hpp:188
Definition: range-concepts.hpp:80
Definition: range-concepts.hpp:170
Definition: tuple_reverse.hpp:103
Definition: range-access.hpp:25
Definitions relating to the availability of c++ language features.
Definition: range-concepts.hpp:39
constexpr bool size
T is either an index representing a size, or void which represents that there is no size...
Definition: size.hpp:32
Definition: range-concepts.hpp:152
Definition: range-concepts.hpp:116
Definition: range-concepts.hpp:134
Definition: range-concepts.hpp:62