File indexing completed on 2025-01-18 09:43:27
0001
0002
0003
0004
0005
0006 #ifndef BOOST_PARAMETER_AUX_PREPROCESSOR_IMPL_SPECIFICATION_HPP
0007 #define BOOST_PARAMETER_AUX_PREPROCESSOR_IMPL_SPECIFICATION_HPP
0008
0009 #include <boost/parameter/optional.hpp>
0010
0011
0012 #define BOOST_PARAMETER_QUALIFIED_TAG_optional(tag) \
0013 optional<tag
0014
0015
0016 #include <boost/parameter/required.hpp>
0017
0018 #define BOOST_PARAMETER_QUALIFIED_TAG_required(tag) \
0019 required<tag
0020
0021
0022 #include <boost/parameter/deduced.hpp>
0023
0024 #define BOOST_PARAMETER_QUALIFIED_TAG_deduced_optional(tag) \
0025 optional< ::boost::parameter::deduced<tag>
0026
0027
0028 #define BOOST_PARAMETER_QUALIFIED_TAG_deduced_required(tag) \
0029 required< ::boost::parameter::deduced<tag>
0030
0031
0032 #include <boost/parameter/aux_/preprocessor/impl/argument_specs.hpp>
0033 #include <boost/parameter/config.hpp>
0034 #include <boost/preprocessor/punctuation/comma_if.hpp>
0035 #include <boost/preprocessor/cat.hpp>
0036
0037 #if BOOST_WORKAROUND(BOOST_BORLANDC, BOOST_TESTED_AT(0x564))
0038
0039 #include <boost/parameter/aux_/use_default.hpp>
0040
0041 #define BOOST_PARAMETER_SPECIFICATION_ELEM_R(r, tag_namespace, i, elem) \
0042 BOOST_PP_COMMA_IF(i) ::boost::parameter::BOOST_PP_CAT( \
0043 BOOST_PARAMETER_QUALIFIED_TAG_ \
0044 , BOOST_PARAMETER_FN_ARG_QUALIFIER(elem) \
0045 )(tag_namespace::BOOST_PARAMETER_FN_ARG_NAME(elem)) \
0046 , ::boost::parameter::aux::use_default \
0047 >
0048
0049
0050 #else
0051
0052 #include <boost/parameter/aux_/pp_impl/unwrap_predicate.hpp>
0053
0054
0055 #define BOOST_PARAMETER_SPECIFICATION_ELEM_R(r, tag_namespace, i, elem) \
0056 BOOST_PP_COMMA_IF(i) ::boost::parameter::BOOST_PP_CAT( \
0057 BOOST_PARAMETER_QUALIFIED_TAG_ \
0058 , BOOST_PARAMETER_FN_ARG_QUALIFIER(elem) \
0059 )(tag_namespace::BOOST_PARAMETER_FN_ARG_NAME(elem)) \
0060 , typename ::boost::parameter::aux::unwrap_predicate< \
0061 void BOOST_PARAMETER_FN_ARG_PRED(elem) \
0062 >::type \
0063 >
0064
0065
0066 #endif
0067
0068 #include <boost/parameter/parameters.hpp>
0069 #include <boost/parameter/aux_/preprocessor/impl/function_name.hpp>
0070 #include <boost/preprocessor/control/if.hpp>
0071 #include <boost/preprocessor/seq/for_each_i.hpp>
0072
0073
0074
0075
0076 #define BOOST_PARAMETER_SPECIFICATION(tag_ns, base, split_args, is_const) \
0077 template <typename BoostParameterDummy> \
0078 struct BOOST_PP_CAT( \
0079 BOOST_PP_CAT( \
0080 BOOST_PP_IF( \
0081 is_const \
0082 , boost_param_params_const_ \
0083 , boost_param_params_ \
0084 ) \
0085 , __LINE__ \
0086 ) \
0087 , BOOST_PARAMETER_MEMBER_FUNCTION_NAME(base) \
0088 ) : ::boost::parameter::parameters< \
0089 BOOST_PP_SEQ_FOR_EACH_I( \
0090 BOOST_PARAMETER_SPECIFICATION_ELEM_R, tag_ns, split_args \
0091 ) \
0092 > \
0093 { \
0094 }; \
0095 typedef BOOST_PP_CAT( \
0096 BOOST_PP_CAT( \
0097 BOOST_PP_IF( \
0098 is_const \
0099 , boost_param_params_const_ \
0100 , boost_param_params_ \
0101 ) \
0102 , __LINE__ \
0103 ) \
0104 , BOOST_PARAMETER_MEMBER_FUNCTION_NAME(base) \
0105 )<int>
0106
0107
0108 #endif
0109