The output_iterator concept defines requirements for a type that
can be used to write values (from the requirement for
writable ([iterator.concept.writable])) and which can be both pre- and post-incremented.

template<class I, class T> concept output_iterator = input_or_output_iterator<I> && 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;