| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091 | // Copyright Daniel Wallin 2006.// Copyright Cromwell D. Enage 2017.// 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_PARAMETER_AUX_PP_IMPL_ARGUMENT_PACK_HPP#define BOOST_PARAMETER_AUX_PP_IMPL_ARGUMENT_PACK_HPP#include <boost/parameter/aux_/pack/tag_keyword_arg.hpp>#include <boost/parameter/aux_/pack/make_arg_list.hpp>#include <boost/parameter/config.hpp>#if defined(BOOST_PARAMETER_HAS_PERFECT_FORWARDING)#include <boost/parameter/aux_/pack/make_parameter_spec_items.hpp>#if defined(BOOST_PARAMETER_CAN_USE_MP11)#include <boost/mp11/integral.hpp>#include <boost/mp11/list.hpp>#else#include <boost/mpl/bool.hpp>#include <boost/mpl/pair.hpp>#endifnamespace boost { namespace parameter { namespace aux {    template <typename Parameters, typename ...Args>    struct argument_pack    {        typedef typename ::boost::parameter::aux::make_arg_list<            typename ::boost::parameter::aux::make_parameter_spec_items<                typename Parameters::parameter_spec              , Args...            >::type          , typename Parameters::deduced_list          , ::boost::parameter::aux::tag_keyword_arg#if defined(BOOST_PARAMETER_CAN_USE_MP11)          , ::boost::mp11::mp_false#else          , ::boost::mpl::false_#endif        >::type result;#if defined(BOOST_PARAMETER_CAN_USE_MP11)        using type = ::boost::mp11::mp_at_c<result,0>;#else        typedef typename ::boost::mpl::first<result>::type type;#endif    };}}} // namespace boost::parameter::aux#else   // !defined(BOOST_PARAMETER_HAS_PERFECT_FORWARDING)#include <boost/parameter/aux_/void.hpp>#include <boost/parameter/aux_/pack/make_items.hpp>#include <boost/parameter/aux_/preprocessor/no_perfect_forwarding_begin.hpp>#include <boost/preprocessor/facilities/intercept.hpp>#include <boost/preprocessor/repetition/enum_trailing_binary_params.hpp>#include <boost/mpl/bool.hpp>#include <boost/mpl/pair.hpp>namespace boost { namespace parameter { namespace aux {    template <        typename Parameters        BOOST_PP_ENUM_TRAILING_BINARY_PARAMS(            BOOST_PARAMETER_MAX_ARITY          , typename A          , = ::boost::parameter::void_ BOOST_PP_INTERCEPT        )    >    struct argument_pack    {        typedef typename ::boost::parameter::aux::make_arg_list<            typename BOOST_PARAMETER_build_arg_list(                BOOST_PARAMETER_MAX_ARITY              , ::boost::parameter::aux::make_items              , typename Parameters::parameter_spec              , A            )::type          , typename Parameters::deduced_list          , ::boost::parameter::aux::tag_keyword_arg          , ::boost::mpl::false_        >::type result;        typedef typename ::boost::mpl::first<result>::type type;    };}}} // namespace boost::parameter::aux#include <boost/parameter/aux_/preprocessor/no_perfect_forwarding_end.hpp>#endif  // BOOST_PARAMETER_HAS_PERFECT_FORWARDING#endif  // include guard
 |