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
?
И еще один: стоит ли делать предложение или сообщение об ошибке для повышения?