| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120 | // 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 <boost/parameter/aux_/name.hpp>#include <boost/preprocessor/stringize.hpp>#include <boost/config.hpp>#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 <boost/parameter/keyword.hpp>#define BOOST_PARAMETER_NAME_KEYWORD(tag_namespace, tag, name)               \    namespace                                                                \    {                                                                        \        ::boost::parameter::keyword<tag_namespace::tag> const& name          \            = ::boost::parameter::keyword<tag_namespace::tag>::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 <boost/preprocessor/tuple/elem.hpp>#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 <boost/parameter/aux_/preprocessor/qualifier.hpp>#include <boost/preprocessor/tuple/eat.hpp>#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 <boost/preprocessor/cat.hpp>#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 <boost/parameter/aux_/preprocessor/is_binary.hpp>#include <boost/preprocessor/control/iif.hpp>#define BOOST_PARAMETER_NAME(name)                                           \    BOOST_PP_IIF(                                                            \        BOOST_PARAMETER_IS_BINARY(name)                                      \      , BOOST_PARAMETER_COMPLEX_NAME                                         \      , BOOST_PARAMETER_SIMPLE_NAME                                          \    )(name)/**/#include <boost/parameter/template_keyword.hpp>#endif  // include guard
 |