| // 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) \ |
| >, |
| /**/ |
| |