[range.repeat.iterator] (original) (raw)
25 Ranges library [ranges]
25.6 Range factories [range.factories]
25.6.5 Repeat view [range.repeat]
25.6.5.3 Class repeat_view::iterator [range.repeat.iterator]
namespace std::ranges { template<move_constructible T, semiregular Bound> requires (is_object_v<T> && same_as<T, remove_cv_t<T>> && (integer-like-with-usable-difference-type<Bound> || same_as<Bound, unreachable_sentinel_t>)) class repeat_view<T, Bound>::iterator { private: using index-type = conditional_t<same_as<Bound, unreachable_sentinel_t>, ptrdiff_t, Bound>;const T* value_ = nullptr; index-type current_ = index-type(); constexpr explicit iterator(const T* value, index-type b = index-type()); public: using iterator_concept = random_access_iterator_tag;using iterator_category = random_access_iterator_tag;using value_type = T;using difference_type = see below;iterator() = default;constexpr const T& operator*() const noexcept;constexpr iterator& operator++();constexpr iterator operator++(int);constexpr iterator& operator--();constexpr iterator operator--(int);constexpr iterator& operator+=(difference_type n);constexpr iterator& operator-=(difference_type n);constexpr const T& operator[](difference_type n) const noexcept;friend constexpr bool operator==(const iterator& x, const iterator& y);friend constexpr auto operator<=>(const iterator& x, const iterator& y);friend constexpr iterator operator+(iterator i, difference_type n);friend constexpr iterator operator+(difference_type n, iterator i);friend constexpr iterator operator-(iterator i, difference_type n);friend constexpr difference_type operator-(const iterator& x, const iterator& y);};}
If is-signed-integer-like<_index-type_> is true, the member typedef-name difference_typedenotes index-type.
constexpr explicit _iterator_(const T* value, _index-type_ b = _index-type_());
Preconditions: If Bound is not unreachable_sentinel_t, b ≥ 0.
Effects: Initializes value_ with value and_current__ with b.
constexpr const T& operator*() const noexcept;
Effects: Equivalent to: return *value_;
constexpr _iterator_& operator++();
Effects: Equivalent to:++current_;return *this;
constexpr _iterator_ operator++(int);
Effects: Equivalent to:auto tmp = *this;++*this;return tmp;
constexpr _iterator_& operator--();
Preconditions: If Bound is not unreachable_sentinel_t,.
Effects: Equivalent to:--current_;return *this;
constexpr _iterator_ operator--(int);
Effects: Equivalent to:auto tmp = *this;--*this;return tmp;
constexpr _iterator_& operator+=(difference_type n);
Preconditions: If Bound is not unreachable_sentinel_t,.
Effects: Equivalent to:current_ += n;return *this;
constexpr _iterator_& operator-=(difference_type n);
Preconditions: If Bound is not unreachable_sentinel_t,.
Effects: Equivalent to:current_ -= n;return *this;
constexpr const T& operator[](difference_type n) const noexcept;
Effects: Equivalent to: return *(*this + n);
friend constexpr bool operator==(const _iterator_& x, const _iterator_& y);
Effects: Equivalent to: return x.current_ == y.current_;
friend constexpr auto operator<=>(const _iterator_& x, const _iterator_& y);
Effects: Equivalent to: return x.current_ <=> y.current_;
friend constexpr _iterator_ operator+(_iterator_ i, difference_type n);friend constexpr _iterator_ operator+(difference_type n, _iterator_ i);
Effects: Equivalent to:i += n;return i;
friend constexpr _iterator_ operator-(_iterator_ i, difference_type n);
Effects: Equivalent to:i -= n;return i;
friend constexpr difference_type operator-(const _iterator_& x, const _iterator_& y);
Effects: Equivalent to:return static_cast<difference_type>(x.current_) - static_cast<difference_type>(y.current_);