// Copyright Cromwell D. Enage 2018. // 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_ARE_TAGGED_ARGUMENTS_HPP #define BOOST_PARAMETER_ARE_TAGGED_ARGUMENTS_HPP #include #if defined(BOOST_PARAMETER_HAS_PERFECT_FORWARDING) namespace boost { namespace parameter { template struct are_tagged_arguments; }} // namespace boost::parameter #include namespace boost { namespace parameter { template struct are_tagged_arguments : ::boost::parameter::aux::is_tagged_argument { }; }} // namespace boost::parameter #include #include namespace boost { namespace parameter { template struct are_tagged_arguments : ::boost::mpl::if_< ::boost::parameter::aux::is_tagged_argument , ::boost::parameter::are_tagged_arguments , ::boost::mpl::false_ >::type { }; }} // namespace boost::parameter #else // !defined(BOOST_PARAMETER_HAS_PERFECT_FORWARDING) #define BOOST_PARAMETER_ARE_TAGGED_ARGUMENTS_END_Z(z, n, false_t) , false_t> /**/ #include #include #include #define BOOST_PARAMETER_ARE_TAGGED_ARGUMENTS_BEGIN_Z(z, n, prefix) \ ::boost::mpl::eval_if< \ ::boost::parameter::aux::is_tagged_argument, /**/ #include #include #include #include #include #include #include #define BOOST_PARAMETER_ARE_TAGGED_ARGUMENTS_OVERLOADS_Z(z, n, prefix) \ template \ struct are_tagged_arguments< \ BOOST_PP_ENUM_PARAMS_Z(z, n, prefix) \ BOOST_PP_ENUM_TRAILING_PARAMS_Z( \ z \ , BOOST_PP_SUB(BOOST_PARAMETER_COMPOSE_MAX_ARITY, n) \ , ::boost::parameter::void_ BOOST_PP_INTERCEPT \ ) \ > : BOOST_PP_CAT(BOOST_PP_REPEAT_, z)( \ n \ , BOOST_PARAMETER_ARE_TAGGED_ARGUMENTS_BEGIN_Z \ , prefix \ ) \ ::boost::mpl::true_ \ BOOST_PP_CAT(BOOST_PP_REPEAT_, z)( \ n \ , BOOST_PARAMETER_ARE_TAGGED_ARGUMENTS_END_Z \ , ::boost::mpl::false_ \ )::type \ { \ }; /**/ #include #include namespace boost { namespace parameter { template < BOOST_PP_ENUM_BINARY_PARAMS( BOOST_PP_INC(BOOST_PARAMETER_COMPOSE_MAX_ARITY) , typename TaggedArg , = ::boost::parameter::void_ BOOST_PP_INTERCEPT ) > struct are_tagged_arguments; }} // namespace boost::parameter #include namespace boost { namespace parameter { BOOST_PP_REPEAT_FROM_TO( 1 , BOOST_PP_INC(BOOST_PARAMETER_COMPOSE_MAX_ARITY) , BOOST_PARAMETER_ARE_TAGGED_ARGUMENTS_OVERLOADS_Z , TaggedArg ) }} // namespace boost::parameter #undef BOOST_PARAMETER_ARE_TAGGED_ARGUMENTS_OVERLOADS_Z #undef BOOST_PARAMETER_ARE_TAGGED_ARGUMENTS_BEGIN_Z #undef BOOST_PARAMETER_ARE_TAGGED_ARGUMENTS_END_Z #endif // BOOST_PARAMETER_HAS_PERFECT_FORWARDING #endif // include guard