Есть ли причина по которой function не хочет мувать объекты?
ну я тоже не вижу причин. move — это может и не то что нужно, а вот почему не forward — это вопрос.
Да, такая проблема с function есть, так как она хранит type erasure объекты. Её конструктор копирования не может знать, внутри копируемый тип или нет. Поэтому класс для копируемых и некопируемых функций должен быть разным. Это можно сделать через какой-нибудь шаблонный аргумент bool is_move_only или через отдельный класс. В любом случае, это не в std. Вот кто-то реализовал unique_function: https://github.com/Naios/function2/blob/master/Readme.md
Обсуждают сегодня