Mikhail Matrosov wrote:
Can you suggest a workaround for this situation? Or maybe a way of improving function_output_iterator to overcome this issue?
One way of working around this limitation would be to define a class optional_fn<F> that is like optional<F> but doesn't use F::operator= in its assignment, always destroying the left side and copying instead. Its operator() would forward to F::operator(). So you'd be able to construct a function_output_iterator from make_optional_fn( []... ). This would also make the iterator default constructible although this is not necessary for output iterators. It is necessary for make_transform_iterator though, which would also benefit from a similar treatment. This should arguably be built into the iterators themselves; I think that this has come up before on the list, but I don't remember the outcome of the discussion.