[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;