|
|
- Index: boost_1_64_0/boost/context/continuation.hpp
- ===================================================================
- --- boost_1_64_0.orig/boost/context/continuation.hpp 2017-04-24 12:36:55.987412031 +0100
- +++ boost_1_64_0/boost/context/continuation.hpp 2017-04-24 12:37:49.730416122 +0100
- @@ -56,7 +56,7 @@
- namespace context {
- namespace detail {
-
- -template< int N >
- +template<typename U>
- struct helper {
- template< typename T >
- static T convert( T && t) noexcept {
- @@ -64,8 +64,8 @@
- }
- };
-
- -template<>
- -struct helper< 1 > {
- +template<typename U>
- +struct helper< std::tuple<U> > {
- template< typename T >
- static std::tuple< T > convert( T && t) noexcept {
- return std::make_tuple( std::forward< T >( t) );
- @@ -239,15 +239,16 @@
-
- }
-
- -template< typename Ctx, typename Fn, typename ... Arg >
- +template< typename Ctx, typename Fn, typename Arg >
- detail::transfer_t context_ontop( detail::transfer_t t) {
- - auto p = static_cast< std::tuple< Fn, std::tuple< Arg ... > > * >( t.data);
- + auto p = static_cast< Arg * >( t.data);
- BOOST_ASSERT( nullptr != p);
- typename std::decay< Fn >::type fn = std::forward< Fn >( std::get< 0 >( * p) );
- t.data = & std::get< 1 >( * p);
- Ctx c{ t };
- // execute function, pass continuation via reference
- - std::get< 1 >( * p) = detail::helper< sizeof ... (Arg) >::convert( fn( std::move( c) ) );
- + typedef typename std::decay<decltype(std::get<1>(*p))>::type H;
- + std::get< 1 >(* p) = detail::helper<H>::convert( fn( std::move( c) ) );
- #if defined(BOOST_NO_CXX14_STD_EXCHANGE)
- return { detail::exchange( c.t_.fctx, nullptr), & std::get< 1 >( * p) };
- #else
- @@ -275,7 +276,7 @@
- template< typename Ctx, typename StackAlloc, typename Fn >
- friend class detail::record;
-
- - template< typename Ctx, typename Fn, typename ... Arg >
- + template< typename Ctx, typename Fn, typename Arg >
- friend detail::transfer_t
- context_ontop( detail::transfer_t);
-
- @@ -354,7 +355,7 @@
- template< typename Fn, typename ... Arg >
- continuation resume_with( Fn && fn, Arg ... arg) {
- BOOST_ASSERT( nullptr != t_.fctx);
- - auto tpl = std::make_tuple( std::forward< Fn >( fn), std::forward< Arg >( arg) ... );
- + auto tpl = std::make_tuple( std::forward< Fn >( fn), std::make_tuple( std::forward< Arg >( arg) ... ));
- return detail::ontop_fcontext(
- #if defined(BOOST_NO_CXX14_STD_EXCHANGE)
- detail::exchange( t_.fctx, nullptr),
- @@ -362,7 +363,7 @@
- std::exchange( t_.fctx, nullptr),
- #endif
- & tpl,
- - context_ontop< continuation, Fn, Arg ... >);
- + context_ontop< continuation, Fn, decltype(tpl) >);
- }
-
- continuation resume() {
- @@ -451,7 +452,8 @@
- template<
- typename Fn,
- typename ... Arg,
- - typename = detail::disable_overload< continuation, Fn >
- + typename = detail::disable_overload< continuation, Fn >,
- + typename = detail::disable_overload< std::allocator_arg_t, Fn >
- >
- continuation
- callcc( Fn && fn, Arg ... arg) {
|