This depends entirely on the type of o[output_position]
. If it implements the assignment operator correctly, then it's fine. A correctly implemented assignment operator always works fine with self-assignment.
The idiomatic implementation of the assignment operator in C++ uses the copy-and-swap idiom. This then implies correct self-assignment, even without the this != &other
check you'll often see in other implementations.