template<class F> function(F f);
template <class F, class A> function(allocator_arg_t, const A& a, F f);Requires:
Fshall beCopyConstructible.fshall beCallablefor argument typesArgTypesand return typeR. The copy constructor and destructor of A shall not throw exceptions.§20.9.11.2.1 [func.wrap.func.con]
Note that operator = is defined in terms of this constructor and swap, so the same restrictions apply:
template<class F> function& operator=(F&& f);Effects:
function(std::forward<F>(f)).swap(*this);§20.9.11.2.1 [func.wrap.func.con]
So to answer your question: Yes, it is possible to construct a std::function from a move-capturing lambda (since this only specifies how the lambda captures), but it is not possible to construct a std::function from a move-only type (e.g. a move-capturing lambda which move-captures something that is not copy constructible).