// 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 #include #include #if defined(BOOST_PARAMETER_HAS_PERFECT_FORWARDING) #include #if defined(BOOST_PARAMETER_CAN_USE_MP11) #include #include #else #include #include #endif namespace boost { namespace parameter { namespace aux { template 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; #else typedef typename ::boost::mpl::first::type type; #endif }; }}} // namespace boost::parameter::aux #else // !defined(BOOST_PARAMETER_HAS_PERFECT_FORWARDING) #include #include #include #include #include #include #include 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::type type; }; }}} // namespace boost::parameter::aux #include #endif // BOOST_PARAMETER_HAS_PERFECT_FORWARDING #endif // include guard