23 Iterators library [iterators]

23.3 Iterator requirements [iterator.requirements]

23.3.4 Iterator concepts [iterator.concepts]

23.3.4.10 Concept output_­iterator [iterator.concept.output]

The output_­iterator concept defines requirements for a type that can be used to write values (from the requirement for indirectly_­writable ([iterator.concept.writable])) and which can be both pre- and post-incremented.
[Note
:
Output iterators are not required to model equality_­comparable.
— end note
]
template<class I, class T>
  concept output_iterator =
    input_or_output_iterator<I> &&
    indirectly_writable<I, T> &&
    requires(I i, T&& t) {
      *i++ = std::forward<T>(t);        // not required to be equality-preserving
    };
Let E be an expression such that decltype((E)) is T, and let i be a dereferenceable object of type I.
I and T model output_­iterator<I, T> only if *i++ = E; has effects equivalent to:
*i = E;
++i;
[Note
:
Algorithms on output iterators should never attempt to pass through the same iterator twice.
They should be single-pass algorithms.
— end note
]