- typedef boost::packaged_task<result_type> packaged_task_t;\r
-\r
- auto task = packaged_task_t(f); \r
- auto future = task.get_future();\r
-\r
- boost::thread(std::move(task)).detach();\r
+ boost::thread([=]\r
+ {\r
+ std::unique_ptr<promise_t> pointer_guard(promise);\r
+ std::unique_ptr<F> func_guard(func);\r
+\r
+ try\r
+ { \r
+ detail::invoke_function<result_type>()(*promise, *func);\r
+ }\r
+ catch(...)\r
+ {\r
+ promise->set_exception(boost::current_exception());\r
+ }\r
+ }).detach();\r