Сохранение некопируемого, но подвижного объекта в std :: function

Предположим, у меня есть функтор s, который нельзя копировать, но можно перемещать, как я могу сохранить его в std :: function? т.е. как скомпилировать следующий код? (с использованием gcc 4.6)

#include <functional>
#include <iostream>

struct S
{
  S() = default;
  S(S const&) = delete;
  S& operator=(S const&) = delete;
  S(S&&) { }
  void operator()() { }
};

std::function<void()> func;

void make_func()
{
  S s;
  func = std::bind(std::move(s));  // This won't compile
}

int main()
{
  make_func();
}
11
задан Ralph Zhang 30 October 2011 в 11:30
поделиться