]> git.proxmox.com Git - ceph.git/blob - ceph/src/boost/libs/local_function/include/boost/local_function/aux_/preprocessor/traits/decl_sign_/sign.hpp
bump version to 12.2.2-pve1
[ceph.git] / ceph / src / boost / libs / local_function / include / boost / local_function / aux_ / preprocessor / traits / decl_sign_ / sign.hpp
1
2 // Copyright (C) 2009-2012 Lorenzo Caminiti
3 // Distributed under the Boost Software License, Version 1.0
4 // (see accompanying file LICENSE_1_0.txt or a copy at
5 // http://www.boost.org/LICENSE_1_0.txt)
6 // Home at http://www.boost.org/libs/local_function
7
8 #ifndef BOOST_LOCAL_FUNCTION_AUX_PP_DECL_TRAITS_SIGN_HPP_
9 #define BOOST_LOCAL_FUNCTION_AUX_PP_DECL_TRAITS_SIGN_HPP_
10
11 #include <boost/local_function/aux_/preprocessor/traits/decl_sign_/validate.hpp>
12 #include <boost/local_function/aux_/preprocessor/traits/decl_sign_/any_bind_type.hpp>
13 #include <boost/local_function/aux_/preprocessor/traits/decl_/nil.hpp>
14 #include <boost/local_function/aux_/preprocessor/traits/decl_/set_error.hpp>
15 #include <boost/local_function/aux_/preprocessor/traits/decl_/validate.hpp>
16 #include <boost/local_function/aux_/preprocessor/traits/decl_/append.hpp>
17 #include <boost/local_function/detail/preprocessor/keyword/const_bind.hpp>
18 #include <boost/local_function/detail/preprocessor/keyword/bind.hpp>
19 #include <boost/local_function/detail/preprocessor/keyword/return.hpp>
20 #include <boost/local_function/detail/preprocessor/keyword/default.hpp>
21 #include <boost/local_function/detail/preprocessor/keyword/thisunderscore.hpp>
22 #include <boost/preprocessor/control/iif.hpp>
23 #include <boost/preprocessor/facilities/is_empty.hpp>
24 #include <boost/preprocessor/list/fold_left.hpp>
25
26 // PRIVATE //
27
28 // Parse const binds.
29
30 #define BOOST_LOCAL_FUNCTION_AUX_PP_DECL_TRAITS_SIGN_VALID_CONST_BIND_THIS_( \
31 decl_traits, sign) \
32 BOOST_LOCAL_FUNCTION_AUX_PP_DECL_TRAITS_APPEND_CONST_BIND_THIS_TYPE( \
33 decl_traits, \
34 BOOST_LOCAL_FUNCTION_AUX_PP_DECL_TRAITS_SIGN_ANY_BIND_THIS_TYPE( \
35 sign))
36
37 #define BOOST_LOCAL_FUNCTION_AUX_PP_DECL_TRAITS_SIGN_VALID_CONST_BIND_VAR_( \
38 decl_traits, sign) \
39 BOOST_LOCAL_FUNCTION_AUX_PP_DECL_TRAITS_APPEND_CONST_BIND(decl_traits, \
40 BOOST_LOCAL_FUNCTION_AUX_PP_DECL_TRAITS_SIGN_ANY_BIND_WITHOUT_TYPE(\
41 sign), \
42 BOOST_LOCAL_FUNCTION_AUX_PP_DECL_TRAITS_SIGN_ANY_BIND_WITH_TYPE( \
43 sign))
44
45 #define BOOST_LOCAL_FUNCTION_AUX_PP_DECL_TRAITS_SIGN_VALID_CONST_BIND_( \
46 decl_traits, sign) \
47 /* check from back because non `this` bounds might have `&` in front */ \
48 BOOST_PP_IIF(BOOST_LOCAL_FUNCTION_DETAIL_PP_KEYWORD_IS_THISUNDERSCORE_BACK(\
49 /* remove all leading symbols `[const] bind [(type)] ...` */ \
50 BOOST_LOCAL_FUNCTION_AUX_PP_DECL_TRAITS_SIGN_ANY_BIND_WITHOUT_TYPE(\
51 sign)),\
52 BOOST_LOCAL_FUNCTION_AUX_PP_DECL_TRAITS_SIGN_VALID_CONST_BIND_THIS_ \
53 , \
54 BOOST_LOCAL_FUNCTION_AUX_PP_DECL_TRAITS_SIGN_VALID_CONST_BIND_VAR_ \
55 )(decl_traits, sign)
56
57 // Parse binds.
58
59 #define BOOST_LOCAL_FUNCTION_AUX_PP_DECL_TRAITS_SIGN_VALID_BIND_THIS_( \
60 decl_traits, sign) \
61 BOOST_LOCAL_FUNCTION_AUX_PP_DECL_TRAITS_APPEND_BIND_THIS_TYPE(decl_traits, \
62 BOOST_LOCAL_FUNCTION_AUX_PP_DECL_TRAITS_SIGN_ANY_BIND_THIS_TYPE( \
63 sign))
64
65 #define BOOST_LOCAL_FUNCTION_AUX_PP_DECL_TRAITS_SIGN_VALID_BIND_VAR_( \
66 decl_traits, sign) \
67 BOOST_LOCAL_FUNCTION_AUX_PP_DECL_TRAITS_APPEND_BIND(decl_traits, \
68 BOOST_LOCAL_FUNCTION_AUX_PP_DECL_TRAITS_SIGN_ANY_BIND_WITHOUT_TYPE(\
69 sign), \
70 BOOST_LOCAL_FUNCTION_AUX_PP_DECL_TRAITS_SIGN_ANY_BIND_WITH_TYPE( \
71 sign))
72
73 #define BOOST_LOCAL_FUNCTION_AUX_PP_DECL_TRAITS_SIGN_VALID_BIND_( \
74 decl_traits, sign) \
75 /* check from back because non `this` bounds might have `&` in front */ \
76 BOOST_PP_IIF(BOOST_LOCAL_FUNCTION_DETAIL_PP_KEYWORD_IS_THISUNDERSCORE_BACK(\
77 /* remove all leading symbols `[const] bind [(type)] ...` */ \
78 BOOST_LOCAL_FUNCTION_AUX_PP_DECL_TRAITS_SIGN_ANY_BIND_WITHOUT_TYPE(\
79 sign)), \
80 BOOST_LOCAL_FUNCTION_AUX_PP_DECL_TRAITS_SIGN_VALID_BIND_THIS_ \
81 , \
82 BOOST_LOCAL_FUNCTION_AUX_PP_DECL_TRAITS_SIGN_VALID_BIND_VAR_ \
83 )(decl_traits, sign)
84
85 // Parse all elements.
86
87 #define BOOST_LOCAL_FUNCTION_AUX_PP_DECL_TRAITS_SIGN_VALID_( \
88 s, decl_traits, sign) \
89 BOOST_PP_IIF(BOOST_LOCAL_FUNCTION_DETAIL_PP_KEYWORD_IS_RETURN_FRONT(sign), \
90 BOOST_LOCAL_FUNCTION_AUX_PP_DECL_TRAITS_APPEND_RETURN \
91 , BOOST_PP_IIF(BOOST_LOCAL_FUNCTION_DETAIL_PP_KEYWORD_IS_BIND_FRONT(sign), \
92 BOOST_LOCAL_FUNCTION_AUX_PP_DECL_TRAITS_SIGN_VALID_BIND_ \
93 , BOOST_PP_IIF(BOOST_LOCAL_FUNCTION_DETAIL_PP_KEYWORD_IS_CONST_BIND_FRONT( \
94 sign), \
95 BOOST_LOCAL_FUNCTION_AUX_PP_DECL_TRAITS_SIGN_VALID_CONST_BIND_ \
96 , BOOST_PP_IIF(BOOST_LOCAL_FUNCTION_DETAIL_PP_KEYWORD_IS_DEFAULT_FRONT( \
97 sign), \
98 /* elem is `default ...` where leading default is kept because */ \
99 /* default value might not be alphanumeric (so it fails later CAT */ \
100 /* for checks), leading default will be removed later when getting */ \
101 /* the default value */ \
102 BOOST_LOCAL_FUNCTION_AUX_PP_DECL_TRAITS_APPEND_PARAM_DEFAULT \
103 , /* else, it is a function parameter */ \
104 BOOST_LOCAL_FUNCTION_AUX_PP_DECL_TRAITS_APPEND_PARAM \
105 ))))(decl_traits, sign)
106
107 // Parse params after following precondition has been validated by caller.
108 // Precondition: If list contains a default param value `..., default, ...`,
109 // the default value element is never 1st (it always has a previous elem) and
110 // its previous element is a unbind param (no const-bind and no bind).
111 #define BOOST_LOCAL_FUNCTION_AUX_PP_DECL_TRAITS_SIGN_VALID(sign) \
112 BOOST_PP_LIST_FOLD_LEFT( \
113 BOOST_LOCAL_FUNCTION_AUX_PP_DECL_TRAITS_SIGN_VALID_, \
114 BOOST_LOCAL_FUNCTION_AUX_PP_DECL_TRAITS_NIL, sign)
115
116 #define BOOST_LOCAL_FUNCTION_AUX_PP_DECL_TRAITS_SIGN_OK_(sign, unused) \
117 BOOST_LOCAL_FUNCTION_AUX_PP_DECL_TRAITS_VALIDATE( \
118 BOOST_LOCAL_FUNCTION_AUX_PP_DECL_TRAITS_SIGN_VALID(sign))
119
120 #define BOOST_LOCAL_FUNCTION_AUX_PP_DECL_TRAITS_SIGN_ERR_(unused, error) \
121 BOOST_LOCAL_FUNCTION_AUX_PP_DECL_TRAITS_SET_ERROR( \
122 BOOST_LOCAL_FUNCTION_AUX_PP_DECL_TRAITS_NIL, error)
123
124 #define BOOST_LOCAL_FUNCTION_AUX_PP_DECL_TRAITS_SIGN_(sign, defaults_error) \
125 BOOST_PP_IIF(BOOST_PP_IS_EMPTY(defaults_error (/* expand EMPTY */)), \
126 BOOST_LOCAL_FUNCTION_AUX_PP_DECL_TRAITS_SIGN_OK_ \
127 , \
128 BOOST_LOCAL_FUNCTION_AUX_PP_DECL_TRAITS_SIGN_ERR_ \
129 )(sign, defaults_error)
130
131 // PUBLIC //
132
133 #define BOOST_LOCAL_FUNCTION_AUX_PP_DECL_TRAITS_SIGN(sign) \
134 BOOST_LOCAL_FUNCTION_AUX_PP_DECL_TRAITS_SIGN_(sign, \
135 BOOST_LOCAL_FUNCTION_AUX_PP_DECL_TRAITS_SIGN_VALIDATE(sign))
136
137 #endif // #include guard
138