6#if defined(__cpp_lib_ranges)
10namespace mpc::ranges::inline cpo {
12 using std::ranges::begin,
15 std::ranges::input_range,
16 std::ranges::iterator_t,std::ranges::sentinel_t,
17 std::ranges::range_difference_t,
18 std::ranges::range_value_t,
19 std::ranges::range_reference_t,
20 std::ranges::range_rvalue_reference_t;
26namespace mpc::ranges::detail {
27 using std::begin, std::end;
31 constexpr auto operator()(C&& c)
const noexcept(
noexcept(begin(c))) ->
decltype(begin(c)) {
38 constexpr auto operator()(C&& c)
const noexcept(
noexcept(end(c))) ->
decltype(end(c)) {
44namespace mpc::ranges::inline cpo {
46 inline constexpr detail::end_fn end{};
49namespace mpc::ranges {
51 concept range =
requires(T& t) {
57 using iterator_t =
decltype(ranges::begin(std::declval<T&>()));
59 template <ranges::range R>
60 using sentinel_t =
decltype(ranges::end(std::declval<R&>()));
62 template <ranges::range R>
63 using range_difference_t = std::iter_difference_t<ranges::iterator_t<R>>;
65 template <ranges::range R>
66 using range_value_t = std::iter_value_t<ranges::iterator_t<R>>;
68 template <ranges::range R>
69 using range_reference_t = std::iter_reference_t<ranges::iterator_t<R>>;
71 template <ranges::range R>
72 using range_rvalue_reference_t = std::iter_rvalue_reference_t<ranges::iterator_t<R>>;
75 concept input_range = ranges::range<T> and std::input_iterator<ranges::iterator_t<T>>;
Definition: ranges.hpp:29
Definition: ranges.hpp:36