Why can't C++11 move a noncopyable functor to a std::function?
The short answer is that the C++11 specification requires your A
to be CopyConstructible
to be used with std::function
.
The long answer is this requirement exists because std::function
erases the type of your functor within the constructor. To do this, std::function
must access certain members of your functor via virtual functions. These include the call operator, the copy constructor and the destructor. And since these are accessed via a virtual call, they are "used" whether or not you actually use std::function
's copy constructor, destructor or call operator.