diff --git a/include/boost/fiber/future/async.hpp b/include/boost/fiber/future/async.hpp index 1e840137..18873a08 100644 --- a/include/boost/fiber/future/async.hpp +++ b/include/boost/fiber/future/async.hpp @@ -20,9 +20,9 @@ namespace boost { namespace fibers { template< typename Fn, typename ... Args > -future< typename std::result_of< Fn( Args ... ) >::type > +future< typename std::result_of< Fn&&( Args && ... ) >::type > async( Fn && fn, Args && ... args) { - typedef typename std::result_of< Fn( Args ... ) >::type result_type; + typedef typename std::result_of< Fn&&( Args && ... ) >::type result_type; packaged_task< result_type( Args ... ) > pt( std::forward< Fn >( fn) ); future< result_type > f( pt.get_future() ); @@ -31,9 +31,9 @@ async( Fn && fn, Args && ... args) { } template< typename StackAllocator, typename Fn, typename ... Args > -future< typename std::result_of< Fn( Args ... ) >::type > +future< typename std::result_of< Fn&&( Args && ... ) >::type > async( StackAllocator salloc, Fn && fn, Args && ... args) { - typedef typename std::result_of< Fn( Args ... ) >::type result_type; + typedef typename std::result_of< Fn&&( Args && ... ) >::type result_type; packaged_task< result_type( Args ... ) > pt( std::forward< Fn >( fn), std::forward< Args >( args) ... );