3.9 KiB
[range.subrange.ctor]
25 Ranges library [ranges]
25.5 Range utilities [range.utility]
25.5.4 Sub-ranges [range.subrange]
25.5.4.2 Constructors and conversions [range.subrange.ctor]
constexpr subrange([convertible-to-non-slicing](range.subrange.general#concept:convertible-to-non-slicing "25.5.4.1 General [range.subrange.general]")<I> auto i, S s) requires (!StoreSize);
Preconditions: [i, s) is a valid range.
Effects: Initializes begin_ with std::move(i) and end_ withs.
constexpr subrange([convertible-to-non-slicing](range.subrange.general#concept:convertible-to-non-slicing "25.5.4.1 General [range.subrange.general]")<I> auto i, S s, make-unsigned-like-t<iter_difference_t<I>> n) requires (K == subrange_kind::sized);
Preconditions: [i, s) is a valid range, andn == to-unsigned-like(ranges::distance(i, s)) is true.
Effects: Initializes begin_ with std::move(i) and end_ withs.
If StoreSize is true, initializes size_ withn.
[Note 1:
Accepting the length of the range and storing it to later return fromsize() enables subrange to model sized_range even when it stores an iterator and sentinel that do not modelsized_sentinel_for.
â end note]
template<[different-from](range.utility.helpers#concept:different-from "25.5.2 Helper concepts [range.utility.helpers]")<subrange> R> requires [borrowed_range](range.range#concept:borrowed_range "25.4.2 Ranges [range.range]")<R> && [convertible-to-non-slicing](range.subrange.general#concept:convertible-to-non-slicing "25.5.4.1 General [range.subrange.general]")<iterator_t<R>, I> && [convertible_to](concept.convertible#concept:convertible_to "18.4.4 Concept convertible_to [concept.convertible]")<sentinel_t<R>, S> constexpr subrange(R&& r) requires (!StoreSize || [sized_range](range.sized#concept:sized_range "25.4.4 Sized ranges [range.sized]")<R>);
Effects: Equivalent to:
-
If StoreSize is true,subrange(r, static_cast<decltype(size_)>(ranges::size(r))).
-
Otherwise, subrange(ranges::begin(r), ranges::end(r)).
template<[different-from](range.utility.helpers#concept:different-from "25.5.2 Helper concepts [range.utility.helpers]")<subrange> PairLike> requires [pair-like-convertible-from](range.subrange.general#concept:pair-like-convertible-from "25.5.4.1 General [range.subrange.general]")<PairLike, const I&, const S&> constexpr operator PairLike() const;
Effects: Equivalent to: return PairLike(begin_, end_);