]> git.proxmox.com Git - ceph.git/blob - ceph/src/boost/libs/parameter/include/boost/parameter/aux_/overloads.hpp
bump version to 12.2.2-pve1
[ceph.git] / ceph / src / boost / libs / parameter / include / boost / parameter / aux_ / overloads.hpp
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