[common.iter.nav] # 24 Iterators library [[iterators]](./#iterators) ## 24.5 Iterator adaptors [[predef.iterators]](predef.iterators#common.iter.nav) ### 24.5.5 Common iterators [[iterators.common]](iterators.common#common.iter.nav) #### 24.5.5.5 Navigation [common.iter.nav] [🔗](#lib:operator++,common_iterator) `constexpr common_iterator& operator++(); ` [1](#1) [#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/iterators.tex#L5693) *Hardened preconditions*: holds_alternative(v_) is true[.](#1.sentence-1) [2](#2) [#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/iterators.tex#L5697) *Effects*: Equivalent to ++get(v_)[.](#2.sentence-1) [3](#3) [#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/iterators.tex#L5701) *Returns*: *this[.](#3.sentence-1) [🔗](#lib:operator++,common_iterator_) `constexpr decltype(auto) operator++(int); ` [4](#4) [#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/iterators.tex#L5712) *Hardened preconditions*: holds_alternative(v_) is true[.](#4.sentence-1) [5](#5) [#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/iterators.tex#L5716) *Effects*: If I models [forward_iterator](iterator.concept.forward#concept:forward_iterator "24.3.4.11 Concept forward_­iterator [iterator.concept.forward]"), equivalent to:common_iterator tmp = *this;++*this;return tmp; Otherwise, ifrequires(I& i) { { *i++ } -> [*can-reference*](iterator.synopsis#concept:can-reference "24.2 Header  synopsis [iterator.synopsis]"); } is true or[indirectly_readable](iterator.concept.readable#concept:indirectly_readable "24.3.4.2 Concept indirectly_­readable [iterator.concept.readable]") && [constructible_from](concept.constructible#concept:constructible_from "18.4.11 Concept constructible_­from [concept.constructible]"), iter_reference_t> &&[move_constructible](concept.moveconstructible#concept:move_constructible "18.4.13 Concept move_­constructible [concept.moveconstructible]")> is false, equivalent to:return get(v_)++; Otherwise, equivalent to:*postfix-proxy* p(**this);++*this;return p; where *postfix-proxy* is the exposition-only class:class *postfix-proxy* { iter_value_t keep_; constexpr *postfix-proxy*(iter_reference_t&& x): keep_(std::forward>(x)) {}public:constexpr const iter_value_t& operator*() const noexcept {return keep_; }};