|
1 // Copyright David Abrahams, Daniel Wallin 2003. Use, modification and |
|
2 // distribution is subject to the Boost Software License, Version 1.0. |
|
3 // (See accompanying file LICENSE_1_0.txt or copy at |
|
4 // http://www.boost.org/LICENSE_1_0.txt) |
|
5 |
|
6 // This file generates overloads in this format: |
|
7 // |
|
8 // template<class A0, class A1> |
|
9 // typename mpl::apply_wrap1< |
|
10 // aux::make_arg_list< |
|
11 // PS0,A0 |
|
12 // , aux::make_arg_list< |
|
13 // PS1,A1 |
|
14 // , mpl::identity<aux::empty_arg_list> |
|
15 // > |
|
16 // > |
|
17 // , unnamed_list |
|
18 // >::type |
|
19 // operator()(A0 const& a0, A1 const& a1) const |
|
20 // { |
|
21 // typedef typename mpl::apply_wrap1< |
|
22 // aux::make_arg_list< |
|
23 // PS0,A0 |
|
24 // , aux::make_arg_list< |
|
25 // PS1,A1 |
|
26 // , mpl::identity<aux::empty_arg_list> |
|
27 // > |
|
28 // > |
|
29 // >::type arg_tuple; |
|
30 // |
|
31 // return arg_tuple( |
|
32 // a0 |
|
33 // , a1 |
|
34 // , aux::void_() |
|
35 // ... |
|
36 // ); |
|
37 // } |
|
38 // |
|
39 |
|
40 #if !defined(BOOST_PP_IS_ITERATING) |
|
41 # error Boost.Parameters - do not include this file! |
|
42 #endif |
|
43 |
|
44 #define N BOOST_PP_ITERATION() |
|
45 |
|
46 #define BOOST_PARAMETER_open_list(z, n, text) \ |
|
47 aux::item< \ |
|
48 BOOST_PP_CAT(PS, n), BOOST_PP_CAT(A, n) |
|
49 |
|
50 #define BOOST_PARAMETER_close_list(z, n, text) > |
|
51 |
|
52 #define BOOST_PARAMETER_arg_list(n) \ |
|
53 aux::make_arg_list< \ |
|
54 BOOST_PP_ENUM(N, BOOST_PARAMETER_open_list, _) \ |
|
55 , void_ \ |
|
56 BOOST_PP_REPEAT(N, BOOST_PARAMETER_close_list, _) \ |
|
57 , deduced_list \ |
|
58 , aux::tag_keyword_arg \ |
|
59 > |
|
60 |
|
61 #define BOOST_PARAMETER_arg_pack_init(z, n, limit) \ |
|
62 BOOST_PP_CAT(a, BOOST_PP_SUB(limit,n)) |
|
63 |
|
64 template<BOOST_PP_ENUM_PARAMS(N, class A)> |
|
65 typename mpl::first< |
|
66 typename BOOST_PARAMETER_arg_list(N)::type |
|
67 >::type |
|
68 operator()(BOOST_PP_ENUM_BINARY_PARAMS(N, A, & a)) const |
|
69 { |
|
70 typedef typename BOOST_PARAMETER_arg_list(N)::type result; |
|
71 |
|
72 typedef typename mpl::first<result>::type result_type; |
|
73 typedef typename mpl::second<result>::type error; |
|
74 error(); |
|
75 |
|
76 return result_type( |
|
77 BOOST_PP_ENUM(N, BOOST_PARAMETER_arg_pack_init, BOOST_PP_DEC(N)) |
|
78 BOOST_PP_ENUM_TRAILING_PARAMS( |
|
79 BOOST_PP_SUB(BOOST_PARAMETER_MAX_ARITY, N) |
|
80 , aux::void_reference() BOOST_PP_INTERCEPT |
|
81 )); |
|
82 } |
|
83 |
|
84 #undef BOOST_PARAMETER_arg_list |
|
85 #undef BOOST_PARAMETER_open_list |
|
86 #undef BOOST_PARAMETER_close_list |
|
87 #undef N |
|
88 |