7#include <dr/detail/ranges_shim.hpp>
15template <rng::range R>
struct range_size {
16 using type = std::size_t;
19template <rng::sized_range R>
struct range_size<R> {
20 using type = rng::range_size_t<R>;
23template <rng::range R>
using range_size_t =
typename range_size<R>::type;
29 template <rng::viewable_range R>
auto operator()(R &&r)
const {
30 using S = range_size_t<R>;
34 using W = std::conditional_t<std::weakly_incrementable<S>, S, std::size_t>;
35 if constexpr (rng::sized_range<R>) {
36 return rng::views::zip(rng::views::iota(W{0}, W{rng::size(r)}),
39 return rng::views::zip(rng::views::iota(W{0}), std::forward<R>(r));
43 template <rng::viewable_range R>
45 return closure(std::forward<R>(r));
51 template <rng::viewable_range R>
constexpr auto operator()(R &&r)
const {
Definition: enumerate.hpp:27
Definition: enumerate.hpp:49