[range.subrange.access] (original) (raw)
25 Ranges library [ranges]
25.5 Range utilities [range.utility]
25.5.4 Sub-ranges [range.subrange]
25.5.4.3 Accessors [range.subrange.access]
constexpr I begin() const requires [copyable](concepts.object#concept:copyable "18.6 Object concepts [concepts.object]")<I>;
Effects: Equivalent to: return begin_;
constexpr I begin() requires (<I>);
Effects: Equivalent to: return std::move(begin_);
Effects: Equivalent to: return end_;
constexpr bool empty() const;
Effects: Equivalent to: return begin_ == end_;
constexpr _make-unsigned-like-t_<iter_difference_t<I>> size() const requires (K == subrange_kind::sized);
Effects:
- If StoreSize is true, equivalent to: return size_;
- Otherwise, equivalent to: return to-unsigned-like(end_ - begin_);
constexpr subrange next(iter_difference_t<I> n = 1) const & requires [forward_iterator](iterator.concept.forward#concept:forward%5Fiterator "24.3.4.11 Concept forward_iterator [iterator.concept.forward]")<I>;
Effects: Equivalent to:auto tmp = *this; tmp.advance(n);return tmp;
constexpr subrange next(iter_difference_t<I> n = 1) &&;
Effects: Equivalent to:advance(n);return std::move(*this);
Effects: Equivalent to:auto tmp = *this; tmp.advance(-n);return tmp;
constexpr subrange& advance(iter_difference_t<I> n);
Effects: Equivalent to:if constexpr (bidirectional_iterator<I>) { if (n < 0) { ranges::advance(begin_, n);if constexpr (StoreSize) size_ += to-unsigned-like(-n);return *this;} } auto d = n - ranges::advance(begin_, n, end_);if constexpr (StoreSize) size_ -= to-unsigned-like(d);return *this;
template<size_t N, class I, class S, subrange_kind K> requires ((N == 0 && [copyable](concepts.object#concept:copyable "18.6 Object concepts [concepts.object]")<I>) || N == 1) constexpr auto get(const subrange<I, S, K>& r);template<size_t N, class I, class S, subrange_kind K> requires (N < 2) constexpr auto get(subrange<I, S, K>&& r);
Effects: Equivalent to:if constexpr (N == 0) return r.begin();else return r.end();