12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091 |
- #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>
- #endif
- namespace 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
- };
- }}}
- #else
- #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;
- };
- }}}
- #include <boost/parameter/aux_/preprocessor/no_perfect_forwarding_end.hpp>
- #endif
- #endif
|