You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and dots ('.'), can be up to 35 characters long. Letters must be lowercase.
88 lines
2.4 KiB
88 lines
2.4 KiB
// 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 |
|
|
|
|