text: Q:
  
  Why can't C++11 move a noncopyable functor to a std::function?
  
  //------------------------------------------------------------------------------
  struct A
  {
      A(){}
      A(A&&){}
      A& operator=(A&&){return *this;}
      void operator()(){}
  
  private:
      A(const A&);
      A& operator=(const A&);
  
      int x;
  };
  
  //------------------------------------------------------------------------------
  int main()
  {
      A a;
      std::function<void()> func(std::move(a));
  }
  
  'A::A' : cannot access private member declared in class 'A'
  It seems like when I capture something by reference or const I can make a non-copyable lambda. However when I do that it actually works to give it to a std::function.
  
  A:
  
  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.
  
  