Поскольку 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
или есть общий обходной путь для этой проблемы?