123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109 |
- // Copyright Daniel Wallin 2006.
- // 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_PREPROCESSOR_IMPL_SPECIFICATION_HPP
- #define BOOST_PARAMETER_AUX_PREPROCESSOR_IMPL_SPECIFICATION_HPP
- #include <boost/parameter/optional.hpp>
- // Helper macros for BOOST_PARAMETER_SPECIFICATION_ELEM_R.
- #define BOOST_PARAMETER_QUALIFIED_TAG_optional(tag) \
- optional<tag
- /**/
- #include <boost/parameter/required.hpp>
- #define BOOST_PARAMETER_QUALIFIED_TAG_required(tag) \
- required<tag
- /**/
- #include <boost/parameter/deduced.hpp>
- #define BOOST_PARAMETER_QUALIFIED_TAG_deduced_optional(tag) \
- optional< ::boost::parameter::deduced<tag>
- /**/
- #define BOOST_PARAMETER_QUALIFIED_TAG_deduced_required(tag) \
- required< ::boost::parameter::deduced<tag>
- /**/
- #include <boost/parameter/aux_/preprocessor/impl/argument_specs.hpp>
- #include <boost/parameter/config.hpp>
- #include <boost/preprocessor/punctuation/comma_if.hpp>
- #include <boost/preprocessor/cat.hpp>
- #if BOOST_WORKAROUND(BOOST_BORLANDC, BOOST_TESTED_AT(0x564))
- #include <boost/parameter/aux_/use_default.hpp>
- #define BOOST_PARAMETER_SPECIFICATION_ELEM_R(r, tag_namespace, i, elem) \
- BOOST_PP_COMMA_IF(i) ::boost::parameter::BOOST_PP_CAT( \
- BOOST_PARAMETER_QUALIFIED_TAG_ \
- , BOOST_PARAMETER_FN_ARG_QUALIFIER(elem) \
- )(tag_namespace::BOOST_PARAMETER_FN_ARG_NAME(elem)) \
- , ::boost::parameter::aux::use_default \
- >
- /**/
- #else // !BOOST_WORKAROUND(BOOST_BORLANDC, BOOST_TESTED_AT(0x564))
- #include <boost/parameter/aux_/pp_impl/unwrap_predicate.hpp>
- // Expands to each boost::parameter::parameters<> element type.
- #define BOOST_PARAMETER_SPECIFICATION_ELEM_R(r, tag_namespace, i, elem) \
- BOOST_PP_COMMA_IF(i) ::boost::parameter::BOOST_PP_CAT( \
- BOOST_PARAMETER_QUALIFIED_TAG_ \
- , BOOST_PARAMETER_FN_ARG_QUALIFIER(elem) \
- )(tag_namespace::BOOST_PARAMETER_FN_ARG_NAME(elem)) \
- , typename ::boost::parameter::aux::unwrap_predicate< \
- void BOOST_PARAMETER_FN_ARG_PRED(elem) \
- >::type \
- >
- /**/
- #endif // Borland workarounds needed.
- #include <boost/parameter/parameters.hpp>
- #include <boost/parameter/aux_/preprocessor/impl/function_name.hpp>
- #include <boost/preprocessor/control/if.hpp>
- #include <boost/preprocessor/seq/for_each_i.hpp>
- // Expands to a boost::parameter::parameters<> specialization for the
- // function named base. Used by BOOST_PARAMETER_CONSTRUCTOR_AUX and
- // BOOST_PARAMETER_FUNCTION_HEAD for their respective ParameterSpec models.
- #define BOOST_PARAMETER_SPECIFICATION(tag_ns, base, split_args, is_const) \
- template <typename BoostParameterDummy> \
- struct BOOST_PP_CAT( \
- BOOST_PP_CAT( \
- BOOST_PP_IF( \
- is_const \
- , boost_param_params_const_ \
- , boost_param_params_ \
- ) \
- , __LINE__ \
- ) \
- , BOOST_PARAMETER_MEMBER_FUNCTION_NAME(base) \
- ) : ::boost::parameter::parameters< \
- BOOST_PP_SEQ_FOR_EACH_I( \
- BOOST_PARAMETER_SPECIFICATION_ELEM_R, tag_ns, split_args \
- ) \
- > \
- { \
- }; \
- typedef BOOST_PP_CAT( \
- BOOST_PP_CAT( \
- BOOST_PP_IF( \
- is_const \
- , boost_param_params_const_ \
- , boost_param_params_ \
- ) \
- , __LINE__ \
- ) \
- , BOOST_PARAMETER_MEMBER_FUNCTION_NAME(base) \
- )<int>
- /**/
- #endif // include guard
|