// Copyright (C) 2013 Vicente Botet // // Distributed under the Boost Software License, Version 1.0. (See accompanying // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) #define BOOST_THREAD_VERSION 4 #include #include //#include #include #include int f() { return 42; } boost::packaged_task* schedule(boost::function const& fn) { // Normally, the pointer to the packaged task is stored in a queue // for execution on a separate thread, and the schedule function // would return just a future boost::function copy(fn); boost::packaged_task* result = new boost::packaged_task(copy); return result; } struct MyFunc { MyFunc(MyFunc const&) = delete; MyFunc& operator=(MyFunc const&) = delete; MyFunc() {}; MyFunc(MyFunc &&) {}; MyFunc& operator=(MyFunc &&) { return *this;}; void operator()()const {} }; int main() { boost::packaged_task* p(schedule(f)); (*p)(); boost::future fut = p->get_future(); std::cout << "The answer to the ultimate question: " << fut.get() << std::endl; { boost::function f; MyFunc mf; boost::packaged_task t1(f); boost::packaged_task t2(boost::move(mf)); } return 0; }