From 577a4bcdacf39bcbc1a7954ab85f263fe901c944 Mon Sep 17 00:00:00 2001 From: Oliver Kowalke Date: Sun, 8 May 2016 13:50:04 +0200 Subject: [PATCH] fix async() overload --- include/boost/fiber/future/async.hpp | 57 +++++++++------------------- 1 file changed, 18 insertions(+), 39 deletions(-) diff --git a/include/boost/fiber/future/async.hpp b/include/boost/fiber/future/async.hpp index 81488a74..f3adbc60 100644 --- a/include/boost/fiber/future/async.hpp +++ b/include/boost/fiber/future/async.hpp @@ -23,12 +23,12 @@ 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( typename std::decay< Args >::type ... ) - >::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< @@ -44,12 +44,12 @@ async( Fn && fn, Args && ... args) { 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( typename std::decay< Args >::type ... ) - >::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< @@ -63,35 +63,14 @@ async( Policy policy, Fn && fn, Args && ... args) { return f; } -template< typename StackAllocator, 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( typename std::decay< Args >::type ... ) - >::type - >::type -> -async( 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; - - 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() }; - fiber{ 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( typename std::decay< Args >::type ... ) - >::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<