[counted.iter.nav] (original) (raw)

24 Iterators library [iterators]

24.5 Iterator adaptors [predef.iterators]

24.5.7 Counted iterators [iterators.counted]

24.5.7.5 Navigation [counted.iter.nav]

constexpr counted_iterator& operator++();

Preconditions: length > 0.

Effects: Equivalent to:++current;--length;return *this;

constexpr decltype(auto) operator++(int);

Preconditions: length > 0.

Effects: Equivalent to:--length;try { return current++; } catch(...) { ++length; throw; }

Effects: Equivalent to:counted_iterator tmp = *this;++*this;return tmp;

Effects: Equivalent to:--current;++length;return *this;

Effects: Equivalent to:counted_iterator tmp = *this;--*this;return tmp;

Effects: Equivalent to: return counted_iterator(current + n, length - n);

friend constexpr counted_iterator operator+( iter_difference_t<I> n, const counted_iterator& x) requires [random_access_iterator](iterator.concept.random.access#concept:random%5Faccess%5Fiterator "24.3.4.13 Concept random_­access_­iterator [iterator.concept.random.access]")<I>;

Effects: Equivalent to: return x + n;

Preconditions: n <= length.

Effects: Equivalent to:current += n; length -= n;return *this;

Effects: Equivalent to: return counted_iterator(current - n, length + n);

template<[common_with](concept.common#concept:common%5Fwith "18.4.6 Concept common_­with [concept.common]")<I> I2> friend constexpr iter_difference_t<I2> operator-( const counted_iterator& x, const counted_iterator<I2>& y);

Effects: Equivalent to: return y.length - x.length;

friend constexpr iter_difference_t<I> operator-( const counted_iterator& x, default_sentinel_t);

Effects: Equivalent to:return -x.length;

friend constexpr iter_difference_t<I> operator-( default_sentinel_t, const counted_iterator& y);

Effects: Equivalent to: return y.length;

Preconditions: -n <= length.

Effects: Equivalent to:current -= n; length += n;return *this;