5 #ifndef VCCC_RANGES_DISTANCE_HPP
6 #define VCCC_RANGES_DISTANCE_HPP
29 using vccc::detail::return_category;
31 struct distance_niebloid {
32 template<
typename I,
typename S, std::enable_if_t<conjunction<
34 negation< sized_sentinel_for<S, I> >
36 constexpr iter_difference_t<I> operator()(I
first, S last)
const {
38 iter_difference_t<I> result = 0;
39 while (
first != last) {
46 template<
typename I,
typename S, std::enable_if_t<sized_sentinel_for<S, std::decay_t<I>>::value,
int> = 0>
47 constexpr iter_difference_t<std::decay_t<I>> operator()(I&&
first, S last)
const {
48 return last -
static_cast<const std::decay_t<I>&
>(
first);
51 template<
typename R, std::enable_if_t<ranges::sized_range<remove_cvref_t<R>>::value,
int> = 0>
52 constexpr ranges::range_difference_t<R> operator()(R&& r)
const {
53 return static_cast<ranges::range_difference_t<R>
>(
ranges::size(r));
56 template<
typename R, std::enable_if_t<conjunction<
57 ranges::range<remove_cvref_t<R>>,
58 negation< ranges::sized_range<remove_cvref_t<R>> >
60 constexpr ranges::range_difference_t<R> operator()(R&& r)
const {
77 using namespace niebloid;
constexpr VCCC_INLINE_OR_STATIC detail::begin_niebloid begin
returns an iterator to the beginning of a range
Definition: begin.hpp:116
constexpr VCCC_INLINE_OR_STATIC detail::distance_niebloid distance
Definition: distance.hpp:72
constexpr VCCC_INLINE_OR_STATIC detail::size_niebloid size
returns the size of a container or array
Definition: size.hpp:145
constexpr VCCC_INLINE_OR_STATIC detail::end_niebloid end
returns a sentinel indicating the end of a range
Definition: end.hpp:120
#define VCCC_INLINE_OR_STATIC
Definition: inline_or_static.hpp:9
Definition: cxx20_rel_ops.hpp:17
Definition: directory.h:12
constexpr VCCC_INLINE_OR_STATIC detail::element_niebloid< 0 > first
Definition: key_value.hpp:34
constexpr VCCC_INLINE_OR_STATIC detail::element_niebloid< 1 > value
Definition: key_value.hpp:35