Files
2025-10-25 03:02:53 +03:00

3.9 KiB
Raw Permalink Blame History

[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.1General[range.subrange.general]")<I> auto i, S s) requires (!StoreSize);

1

#

Preconditions: [i, s) is a valid range.

2

#

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.1General[range.subrange.general]")<I> auto i, S s, make-unsigned-like-t<iter_difference_t<I>> n) requires (K == subrange_kind::sized);

3

#

Preconditions: [i, s) is a valid range, andn == to-unsigned-like(ranges::distance(i, s)) is true.

4

#

Effects: Initializes begin_ with std::move(i) and end_ withs.

If StoreSize is true, initializes size_ withn.

5

#

[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.2Helper concepts[range.utility.helpers]")<subrange> R> requires [borrowed_range](range.range#concept:borrowed_range "25.4.2Ranges[range.range]")<R> && [convertible-to-non-slicing](range.subrange.general#concept:convertible-to-non-slicing "25.5.4.1General[range.subrange.general]")<iterator_t<R>, I> && [convertible_to](concept.convertible#concept:convertible_to "18.4.4Concept convertible_­to[concept.convertible]")<sentinel_t<R>, S> constexpr subrange(R&& r) requires (!StoreSize || [sized_range](range.sized#concept:sized_range "25.4.4Sized ranges[range.sized]")<R>);

6

#

Effects: Equivalent to:

  • (6.1)

    If StoreSize is true,subrange(r, static_cast<decltype(size_)>(ranges::size(r))).

  • (6.2)

    Otherwise, subrange(ranges::begin(r), ranges::end(r)).

🔗

template<[different-from](range.utility.helpers#concept:different-from "25.5.2Helper concepts[range.utility.helpers]")<subrange> PairLike> requires [pair-like-convertible-from](range.subrange.general#concept:pair-like-convertible-from "25.5.4.1General[range.subrange.general]")<PairLike, const I&, const S&> constexpr operator PairLike() const;

7

#

Effects: Equivalent to: return PairLike(begin_, end_);