Imported Upstream version 1.64.0
[platform/upstream/boost.git] / boost / fiber / future / async.hpp
index d969d19..e68b2c2 100644 (file)
@@ -23,63 +23,85 @@ namespace fibers {
 
 template< typename Fn, typename ... Args >
 future<
-       typename std::result_of<
-               typename std::enable_if<
-                       ! detail::is_launch_policy< typename std::decay< Fn >::type >::value,
-                       typename std::decay< Fn >::type
-               >::type( typename std::decay< Args >::type ... )
-       >::type
+    typename std::result_of<
+        typename std::enable_if<
+            ! detail::is_launch_policy< typename std::decay< Fn >::type >::value,
+            typename std::decay< Fn >::type
+        >::type( typename std::decay< Args >::type ... )
+    >::type
 >
 async( Fn && fn, Args && ... args) {
     typedef typename std::result_of<
         typename std::decay< Fn >::type( typename std::decay< Args >::type ... )
-    >::type     result_t;
+    >::type     result_type;
 
-    packaged_task< result_t( typename std::decay< Args >::type ... ) > pt{
+    packaged_task< result_type( typename std::decay< Args >::type ... ) > pt{
         std::forward< Fn >( fn) };
-    future< result_t > f{ pt.get_future() };
+    future< result_type > f{ pt.get_future() };
     fiber{ std::move( pt), std::forward< Args >( args) ... }.detach();
     return f;
 }
 
 template< typename Policy, typename Fn, typename ... Args >
 future<
-       typename std::result_of<
-               typename std::enable_if<
-                       detail::is_launch_policy< Policy >::value,
-                       typename std::decay< Fn >::type
-               >::type( typename std::decay< Args >::type ...)
-       >::type
+    typename std::result_of<
+        typename std::enable_if<
+            detail::is_launch_policy< Policy >::value,
+            typename std::decay< Fn >::type
+        >::type( typename std::decay< Args >::type ...)
+    >::type
 >
 async( Policy policy, Fn && fn, Args && ... args) {
     typedef typename std::result_of<
         typename std::decay< Fn >::type( typename std::decay< Args >::type ... )
-    >::type     result_t;
+    >::type     result_type;
 
-    packaged_task< result_t( typename std::decay< Args >::type ... ) > pt{
+    packaged_task< result_type( typename std::decay< Args >::type ... ) > pt{
         std::forward< Fn >( fn) };
-    future< result_t > f{ pt.get_future() };
+    future< result_type > f{ pt.get_future() };
     fiber{ policy, std::move( pt), std::forward< Args >( args) ... }.detach();
     return f;
 }
 
 template< typename Policy, typename StackAllocator, typename Fn, typename ... Args >
 future<
-       typename std::result_of<
-               typename std::enable_if<
-                       detail::is_launch_policy< Policy >::value,
-                       typename std::decay< Fn >::type
-               >::type( typename std::decay< Args >::type ... )
-       >::type
+    typename std::result_of<
+        typename std::enable_if<
+            detail::is_launch_policy< Policy >::value,
+            typename std::decay< Fn >::type
+        >::type( typename std::decay< Args >::type ... )
+    >::type
 >
 async( Policy policy, std::allocator_arg_t, StackAllocator salloc, Fn && fn, Args && ... args) {
     typedef typename std::result_of<
         typename std::decay< Fn >::type( typename std::decay< Args >::type ... )
-    >::type     result_t;
+    >::type     result_type;
 
-    packaged_task< result_t( typename std::decay< Args >::type ... ) > pt{
-        std::allocator_arg, salloc, std::forward< Fn >( fn) };
-    future< result_t > f{ pt.get_future() };
+    packaged_task< result_type( typename std::decay< Args >::type ... ) > pt{
+        std::forward< Fn >( fn) };
+    future< result_type > f{ pt.get_future() };
+    fiber{ policy, std::allocator_arg, salloc,
+        std::move( pt), std::forward< Args >( args) ... }.detach();
+    return f;
+}
+
+template< typename Policy, typename StackAllocator, typename Allocator, typename Fn, typename ... Args >
+future<
+    typename std::result_of<
+        typename std::enable_if<
+            detail::is_launch_policy< Policy >::value,
+            typename std::decay< Fn >::type
+        >::type( typename std::decay< Args >::type ... )
+    >::type
+>
+async( Policy policy, std::allocator_arg_t, StackAllocator salloc, Allocator alloc, Fn && fn, Args && ... args) {
+    typedef typename std::result_of<
+        typename std::decay< Fn >::type( typename std::decay< Args >::type ... )
+    >::type     result_type;
+
+    packaged_task< result_type( typename std::decay< Args >::type ... ) > pt{
+        std::allocator_arg, alloc, std::forward< Fn >( fn) };
+    future< result_type > f{ pt.get_future() };
     fiber{ policy, std::allocator_arg, salloc,
         std::move( pt), std::forward< Args >( args) ... }.detach();
     return f;