| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374 | 
//          Copyright Oliver Kowalke 2014.// Distributed under the Boost Software License, Version 1.0.//    (See accompanying file LICENSE_1_0.txt or copy at//          http://www.boost.org/LICENSE_1_0.txt)#ifndef BOOST_CONTEXT_DETAIL_APPLY_H#define BOOST_CONTEXT_DETAIL_APPLY_H#include <functional>#include <tuple>#include <type_traits>#include <utility>#include <boost/config.hpp>#include <boost/context/detail/config.hpp>#if defined(BOOST_NO_CXX17_STD_INVOKE)#include <boost/context/detail/invoke.hpp>#endif#include <boost/context/detail/index_sequence.hpp>#ifdef BOOST_HAS_ABI_HEADERS# include BOOST_ABI_PREFIX#endif#if defined(BOOST_MSVC)# pragma warning(push)# pragma warning(disable: 4100)#endifnamespace boost {namespace context {namespace detail {template< typename Fn, typename Tpl, std::size_t ... I >autoapply_impl( Fn && fn, Tpl && tpl, index_sequence< I ... >) #if defined(BOOST_NO_CXX17_STD_INVOKE)    -> decltype( boost::context::detail::invoke( std::forward< Fn >( fn), std::get< I >( std::forward< Tpl >( tpl) ) ... ) )#else    -> decltype( std::invoke( std::forward< Fn >( fn), std::get< I >( std::forward< Tpl >( tpl) ) ... ) )#endif{#if defined(BOOST_NO_CXX17_STD_INVOKE)    return boost::context::detail::invoke( std::forward< Fn >( fn), std::get< I >( std::forward< Tpl >( tpl) ) ... );#else    return std::invoke( std::forward< Fn >( fn), std::get< I >( std::forward< Tpl >( tpl) ) ... );#endif}template< typename Fn, typename Tpl >autoapply( Fn && fn, Tpl && tpl)     -> decltype( apply_impl( std::forward< Fn >( fn),                 std::forward< Tpl >( tpl),                 make_index_sequence< std::tuple_size< typename std::decay< Tpl >::type >::value >{}) ){    return apply_impl( std::forward< Fn >( fn),                       std::forward< Tpl >( tpl),                       make_index_sequence< std::tuple_size< typename std::decay< Tpl >::type >::value >{});}}}}#if defined(BOOST_MSVC)# pragma warning(pop)#endif#ifdef BOOST_HAS_ABI_HEADERS#include BOOST_ABI_SUFFIX#endif#endif // BOOST_CONTEXT_DETAIL_APPLY_H
 |