89 lines
2.5 KiB
C++
89 lines
2.5 KiB
C++
|
// Copyright David Abrahams, Daniel Wallin 2003. Use, modification and
|
||
|
// distribution is subject to 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)
|
||
|
|
||
|
// This file generates overloads in this format:
|
||
|
//
|
||
|
// template<class A0, class A1>
|
||
|
// typename mpl::apply_wrap1<
|
||
|
// aux::make_arg_list<
|
||
|
// PS0,A0
|
||
|
// , aux::make_arg_list<
|
||
|
// PS1,A1
|
||
|
// , mpl::identity<aux::empty_arg_list>
|
||
|
// >
|
||
|
// >
|
||
|
// , unnamed_list
|
||
|
// >::type
|
||
|
// operator()(A0 const& a0, A1 const& a1) const
|
||
|
// {
|
||
|
// typedef typename mpl::apply_wrap1<
|
||
|
// aux::make_arg_list<
|
||
|
// PS0,A0
|
||
|
// , aux::make_arg_list<
|
||
|
// PS1,A1
|
||
|
// , mpl::identity<aux::empty_arg_list>
|
||
|
// >
|
||
|
// >
|
||
|
// >::type arg_tuple;
|
||
|
//
|
||
|
// return arg_tuple(
|
||
|
// a0
|
||
|
// , a1
|
||
|
// , aux::void_()
|
||
|
// ...
|
||
|
// );
|
||
|
// }
|
||
|
//
|
||
|
|
||
|
#if !defined(BOOST_PP_IS_ITERATING)
|
||
|
# error Boost.Parameters - do not include this file!
|
||
|
#endif
|
||
|
|
||
|
#define N BOOST_PP_ITERATION()
|
||
|
|
||
|
#define BOOST_PARAMETER_open_list(z, n, text) \
|
||
|
aux::item< \
|
||
|
BOOST_PP_CAT(PS, n), BOOST_PP_CAT(A, n)
|
||
|
|
||
|
#define BOOST_PARAMETER_close_list(z, n, text) >
|
||
|
|
||
|
#define BOOST_PARAMETER_arg_list(n) \
|
||
|
aux::make_arg_list< \
|
||
|
BOOST_PP_ENUM(N, BOOST_PARAMETER_open_list, _) \
|
||
|
, void_ \
|
||
|
BOOST_PP_REPEAT(N, BOOST_PARAMETER_close_list, _) \
|
||
|
, deduced_list \
|
||
|
, aux::tag_keyword_arg \
|
||
|
>
|
||
|
|
||
|
#define BOOST_PARAMETER_arg_pack_init(z, n, limit) \
|
||
|
BOOST_PP_CAT(a, BOOST_PP_SUB(limit,n))
|
||
|
|
||
|
template<BOOST_PP_ENUM_PARAMS(N, class A)>
|
||
|
typename mpl::first<
|
||
|
typename BOOST_PARAMETER_arg_list(N)::type
|
||
|
>::type
|
||
|
operator()(BOOST_PP_ENUM_BINARY_PARAMS(N, A, & a)) const
|
||
|
{
|
||
|
typedef typename BOOST_PARAMETER_arg_list(N)::type result;
|
||
|
|
||
|
typedef typename mpl::first<result>::type result_type;
|
||
|
typedef typename mpl::second<result>::type error;
|
||
|
error();
|
||
|
|
||
|
return result_type(
|
||
|
BOOST_PP_ENUM(N, BOOST_PARAMETER_arg_pack_init, BOOST_PP_DEC(N))
|
||
|
BOOST_PP_ENUM_TRAILING_PARAMS(
|
||
|
BOOST_PP_SUB(BOOST_PARAMETER_MAX_ARITY, N)
|
||
|
, aux::void_reference() BOOST_PP_INTERCEPT
|
||
|
));
|
||
|
}
|
||
|
|
||
|
#undef BOOST_PARAMETER_arg_list
|
||
|
#undef BOOST_PARAMETER_open_list
|
||
|
#undef BOOST_PARAMETER_close_list
|
||
|
#undef N
|
||
|
|