123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165 |
- // Copyright David Abrahams, Daniel Wallin 2003.
- // 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)
- // No include guard. This file is intended for multiple inclusion.
- #define BOOST_PARAMETER_right_angle(z, n, _) >
- /**/
- #define BOOST_PARAMETER_satisfies_end(z, n, false_t) ,false_t>
- /**/
- #include <boost/preprocessor/seq/elem.hpp>
- #include <boost/preprocessor/cat.hpp>
- // Generates:
- //
- // make<
- // parameter_spec##0, argument_type##0
- // , make<
- // parameter_spec##1, argument_type##1
- // , ... boost::mpl::identity<boost::parameter::aux::empty_arg_list>
- // ...>
- // >
- #define BOOST_PARAMETER_make_arg_list(z, n, names) \
- BOOST_PP_SEQ_ELEM(0, names)< \
- BOOST_PP_CAT(BOOST_PP_SEQ_ELEM(1, names), n), \
- BOOST_PP_CAT(BOOST_PP_SEQ_ELEM(2, names), n),
- /**/
- #include <boost/parameter/aux_/void.hpp>
- #include <boost/mpl/identity.hpp>
- #include <boost/preprocessor/repetition/repeat.hpp>
- #define BOOST_PARAMETER_build_arg_list(n, make, param_spec, arg_type) \
- BOOST_PP_REPEAT( \
- n, BOOST_PARAMETER_make_arg_list, (make)(param_spec)(arg_type) \
- ) \
- ::boost::mpl::identity< ::boost::parameter::void_> \
- BOOST_PP_REPEAT(n, BOOST_PARAMETER_right_angle, _)
- /**/
- #define BOOST_PARAMETER_make_deduced_list(z, n, names) \
- BOOST_PP_SEQ_ELEM(0, names)<BOOST_PP_CAT(BOOST_PP_SEQ_ELEM(1, names), n),
- /**/
- #define BOOST_PARAMETER_build_deduced_list(n, make, parameter_spec) \
- BOOST_PP_REPEAT( \
- n, BOOST_PARAMETER_make_deduced_list, (make)(parameter_spec) \
- ) \
- ::boost::mpl::identity< ::boost::parameter::void_> \
- BOOST_PP_REPEAT(n, BOOST_PARAMETER_right_angle, _)
- /**/
- #define BOOST_PARAMETER_forward_typedef(z, n, names) \
- typedef BOOST_PP_CAT(BOOST_PP_SEQ_ELEM(0, names), n) \
- BOOST_PP_CAT(BOOST_PP_SEQ_ELEM(1, names), n);
- /**/
- #define BOOST_PARAMETER_template_args(z, n, prefix) \
- typename BOOST_PP_CAT(prefix, n) = ::boost::parameter::void_
- /**/
- #include <boost/mpl/pair.hpp>
- #if (0 < BOOST_PARAMETER_EXPONENTIAL_OVERLOAD_THRESHOLD_ARITY)
- #include <boost/parameter/aux_/pack/item.hpp>
- #include <boost/preprocessor/control/iif.hpp>
- #define BOOST_PARAMETER_make_arg_items_R(r, prefix, i, elem) \
- ::boost::parameter::aux::item<BOOST_PP_CAT(prefix, i), \
- BOOST_PP_CAT(A, i) BOOST_PP_IIF(elem, &, const&),
- /**/
- #include <boost/parameter/aux_/pack/make_arg_list.hpp>
- #include <boost/parameter/aux_/pack/tag_keyword_arg.hpp>
- #include <boost/preprocessor/seq/for_each_i.hpp>
- #include <boost/preprocessor/seq/size.hpp>
- #define BOOST_PARAMETER_function_call_arg_list_R(r, seq) \
- ::boost::parameter::aux::make_arg_list< \
- BOOST_PP_SEQ_FOR_EACH_I_R( \
- r, BOOST_PARAMETER_make_arg_items_R, PS, seq \
- ) \
- ::boost::parameter::void_ \
- BOOST_PP_REPEAT( \
- BOOST_PP_SEQ_SIZE(seq), BOOST_PARAMETER_right_angle, _ \
- ) \
- , deduced_list \
- , ::boost::parameter::aux::tag_keyword_arg \
- >
- /**/
- #include <boost/preprocessor/arithmetic/sub.hpp>
- #define BOOST_PARAMETER_function_call_arg_pack_init(z, n, limit) \
- BOOST_PP_CAT(a, BOOST_PP_SUB(limit, n))
- /**/
- #include <boost/parameter/aux_/preprocessor/binary_seq_to_args.hpp>
- #include <boost/preprocessor/arithmetic/dec.hpp>
- #include <boost/preprocessor/facilities/intercept.hpp>
- #include <boost/preprocessor/repetition/enum.hpp>
- #include <boost/preprocessor/repetition/enum_params.hpp>
- #include <boost/preprocessor/repetition/enum_binary_params.hpp>
- #include <boost/preprocessor/repetition/enum_trailing_params.hpp>
- #include <boost/preprocessor/seq/seq.hpp>
- #define BOOST_PARAMETER_function_call_op_overload_R(r, seq) \
- template < \
- BOOST_PP_ENUM_PARAMS( \
- BOOST_PP_DEC(BOOST_PP_SEQ_SIZE(seq)) \
- , typename A \
- ) \
- > \
- inline typename ::boost::mpl::first< \
- typename BOOST_PARAMETER_function_call_arg_list_R( \
- r, BOOST_PP_SEQ_TAIL(seq) \
- )::type \
- >::type \
- operator()( \
- BOOST_PARAMETER_AUX_PP_BINARY_SEQ_TO_ARGS( \
- BOOST_PP_SEQ_TAIL(seq), (A)(a) \
- ) \
- ) const \
- { \
- typedef typename BOOST_PARAMETER_function_call_arg_list_R( \
- r, BOOST_PP_SEQ_TAIL(seq) \
- )::type result; \
- typedef typename ::boost::mpl::first<result>::type result_type; \
- typedef typename ::boost::mpl::second<result>::type error; \
- error(); \
- return result_type( \
- BOOST_PP_ENUM( \
- BOOST_PP_DEC(BOOST_PP_SEQ_SIZE(seq)) \
- , BOOST_PARAMETER_function_call_arg_pack_init \
- , BOOST_PP_DEC(BOOST_PP_DEC(BOOST_PP_SEQ_SIZE(seq))) \
- ) \
- BOOST_PP_ENUM_TRAILING_PARAMS( \
- BOOST_PP_SUB( \
- BOOST_PARAMETER_COMPOSE_MAX_ARITY \
- , BOOST_PP_DEC(BOOST_PP_SEQ_SIZE(seq)) \
- ) \
- , ::boost::parameter::aux::void_reference() BOOST_PP_INTERCEPT \
- ) \
- ); \
- }
- /**/
- #endif // exponential overloads
- #include <boost/parameter/aux_/pack/satisfies.hpp>
- #include <boost/mpl/eval_if.hpp>
- #define BOOST_PARAMETER_satisfies_begin(z, n, prefix) \
- ::boost::mpl::eval_if< \
- ::boost::parameter::aux::satisfies_requirements_of< \
- typename ::boost::mpl::first<ArgumentPackAndError>::type \
- , BOOST_PP_CAT(prefix, n) \
- >,
- /**/
|