Поскольку std::function является копируемым, стандарт требует, чтобы вызываемые элементы, используемые для его создания, также были копируемыми:
N337 (20.8.11.2.1)
template<class F> function(F f);Требуется:
Fдолжен быть CopyConstructible.fдолжно быть Callable (20.8.11.2) для типов аргументовArgTypesи типа возвратаRКонструктор копирования и деструктор A не должны создавать исключений. '
Это подразумевает, что невозможно сформировать std::function из не подлежащего копированию объекта связывания или лямбда-выражения, которое захватило тип только для перемещения, такой как std::unique_ptr.
Кажется возможным реализовать такую оболочку только для перемещения для вызываемых только для перемещения элементов. Существует ли стандартная библиотека только для перемещения, эквивалентная для std::function или есть общий обходной путь для этой проблемы?