// Copyright Daniel Wallin 2006. // 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) #ifndef BOOST_PARAMETER_NAME_060806_HPP #define BOOST_PARAMETER_NAME_060806_HPP #include #include #include #if defined(BOOST_PARAMETER_CAN_USE_MP11) #define BOOST_PARAMETER_NAME_TAG(tag_namespace, tag, q) \ namespace tag_namespace \ { \ struct tag \ { \ static BOOST_CONSTEXPR char const* keyword_name() \ { \ return BOOST_PP_STRINGIZE(tag); \ } \ using _ = BOOST_PARAMETER_TAG_PLACEHOLDER_TYPE(tag); \ using _1 = _; \ BOOST_PARAMETER_TAG_MP11_PLACEHOLDER_BINDING(binding_fn, tag); \ BOOST_PARAMETER_TAG_MP11_PLACEHOLDER_VALUE(fn, tag); \ using qualifier = ::boost::parameter::q; \ }; \ } /**/ #else // !defined(BOOST_PARAMETER_CAN_USE_MP11) #define BOOST_PARAMETER_NAME_TAG(tag_namespace, tag, q) \ namespace tag_namespace \ { \ struct tag \ { \ static BOOST_CONSTEXPR char const* keyword_name() \ { \ return BOOST_PP_STRINGIZE(tag); \ } \ typedef BOOST_PARAMETER_TAG_PLACEHOLDER_TYPE(tag) _; \ typedef BOOST_PARAMETER_TAG_PLACEHOLDER_TYPE(tag) _1; \ typedef ::boost::parameter::q qualifier; \ }; \ } /**/ #endif // BOOST_PARAMETER_CAN_USE_MP11 #include #define BOOST_PARAMETER_NAME_KEYWORD(tag_namespace, tag, name) \ namespace \ { \ ::boost::parameter::keyword const& name \ = ::boost::parameter::keyword::instance; \ } /**/ #define BOOST_PARAMETER_BASIC_NAME(tag_namespace, tag, qualifier, name) \ BOOST_PARAMETER_NAME_TAG(tag_namespace, tag, qualifier) \ BOOST_PARAMETER_NAME_KEYWORD(tag_namespace, tag, name) /**/ #define BOOST_PARAMETER_COMPLEX_NAME_TUPLE1(object, namespace) \ (object, namespace), ~ /**/ #include #define BOOST_PARAMETER_COMPLEX_NAME_TUPLE(name) \ BOOST_PP_TUPLE_ELEM(2, 0, (BOOST_PARAMETER_COMPLEX_NAME_TUPLE1 name)) /**/ #define BOOST_PARAMETER_COMPLEX_NAME_OBJECT(name) \ BOOST_PP_TUPLE_ELEM(2, 0, BOOST_PARAMETER_COMPLEX_NAME_TUPLE(name)) /**/ #define BOOST_PARAMETER_COMPLEX_NAME_NAMESPACE(name) \ BOOST_PP_TUPLE_ELEM(2, 1, BOOST_PARAMETER_COMPLEX_NAME_TUPLE(name)) /**/ #include #include #define BOOST_PARAMETER_COMPLEX_NAME(name) \ BOOST_PARAMETER_BASIC_NAME( \ BOOST_PARAMETER_COMPLEX_NAME_NAMESPACE(name) \ , BOOST_PARAMETER_UNQUALIFIED(BOOST_PP_TUPLE_EAT(2) name) \ , BOOST_PARAMETER_GET_QUALIFIER(BOOST_PP_TUPLE_EAT(2) name) \ , BOOST_PARAMETER_COMPLEX_NAME_OBJECT(name) \ ) /**/ #include #define BOOST_PARAMETER_SIMPLE_NAME(name) \ BOOST_PARAMETER_BASIC_NAME( \ tag \ , BOOST_PARAMETER_UNQUALIFIED(name) \ , BOOST_PARAMETER_GET_QUALIFIER(name) \ , BOOST_PP_CAT(_, BOOST_PARAMETER_UNQUALIFIED(name)) \ ) /**/ #include #include #define BOOST_PARAMETER_NAME(name) \ BOOST_PP_IIF( \ BOOST_PARAMETER_IS_BINARY(name) \ , BOOST_PARAMETER_COMPLEX_NAME \ , BOOST_PARAMETER_SIMPLE_NAME \ )(name) /**/ #include #endif // include guard