boost :: function_output_iterator construido a partir de la función lambda no es asignable

Considere el siguiente fragmento de código:

auto f = [](int x) { std::cout << x; };
auto it = boost::make_function_output_iterator(f);
decltype(it) it2 = it;  // Ok, copied
it2 = it;  // Does not compile, cannot assign!

El problema es,function_output_iterator construido de esta manera no es asignable, y por lo tanto no satisface elIterador concepto, que requiere tipo para serCopiar Asignable.

Esto no es un error, ya queimpulsar la documentación del iterador de salida de función claramentedice:

UnaryFunction debe ser asignable y copiable constructible.

Mientras operador de asignación de unfunción lambda esta borrado:

ClosureType& operator=(const ClosureType&) = delete;

Entonces, este comportamiento es técnicamente correcto, pero para mí es algo inesperado. Creo que es un deseo perfectamente razonable de construirfunction_output_iterator dado un cierre producido por la función lambda. Me parece inconveniente por qué este caso de uso causa un problema.

Hm, ok, este StackOverflow, así que tengo que hacer una pregunta :) Aquí está: ¿cómo solucionar esto? Cómo obtener un iterador correcto dado un cierre, que actúa comofunction_output_iterator?

Y otro: ¿vale la pena hacer una propuesta o un informe de error para impulsar?

Respuestas a la pregunta(2)

Su respuesta a la pregunta