boost :: function_output_iterator, созданный из лямбда-функции, не может быть назначен

Рассмотрим следующий фрагмент кода:

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!

Проблема в,function_output_iterator построенный таким образом, не присваивается, и, следовательно, не удовлетворяетИтератор концепция, которая требует типа бытьCopyAssignable.

Это не ошибка, так какфорсировать выходную документацию итератора функции явноговорит:

UnaryFunction должна быть назначаемой и копируемой.

В то время как оператор присваиваниялямбда-функция удален:

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

Так что это поведение технически правильно, но для меня несколько неожиданно. Я думаю, что это вполне разумное желание построитьfunction_output_iterator дано замыкание, произведенное лямбда-функцией. Мне кажется неудобным, почему этот вариант использования вызывает проблемы.

Хм, хорошо, это StackOverflow, поэтому я должен задать вопрос :) Вот оно: как обойти это? Как получить правильный итератор с заданным замыканием, которое действует какfunction_output_iterator?

И еще один: стоит ли делать предложение или сообщение об ошибке для повышения?

Ответы на вопрос(2)

Ваш ответ на вопрос