]> git.proxmox.com Git - ceph.git/blob - ceph/src/boost/boost/callable_traits/detail/unguarded/pmf_varargs_4.hpp
update sources to v12.2.3
[ceph.git] / ceph / src / boost / boost / callable_traits / detail / unguarded / pmf_varargs_4.hpp
1 /*
2 Copyright (c) 2016 Barrett Adair
3
4 Distributed under the Boost Software License, Version 1.0.
5 (See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
6
7 HEADER GUARDS INTENTIONALLY OMITTED
8 DO NOT INCLUDE THIS HEADER DIRECTLY
9
10 BOOST_CLBL_TRTS_INCLUDE_QUALIFIERS - the function-level qualifiers for the
11 current inclusion (combinations of `const` `volatile` `&` `&&`, or nothing)
12
13 BOOST_CLBL_TRTS_INCLUDE_TRANSACTION_SAFE - the transaction_safe specifier for
14 the current include (`transaction_safe` or nothing)
15
16 BOOST_CLBL_TRTS_IS_TRANSACTION_SAFE - `std::true_type` or `std::false_type`,
17 tied on whether BOOST_CLBL_TRTS_INCLUDE_TRANSACTION_SAFE is `transaction_safe`
18
19 BOOST_CLBL_TRTS_TRANSACTION_SAFE_SPECIFIER - `transaction_safe` when
20 BOOST_CLBL_TRTS_ENABLE_TRANSACTION_SAFE is enabled, otherwise nothing
21
22 BOOST_CLBL_TRTS_NOEXCEPT_SPEC - the noexcept specifier for
23 the current include (`noexcept` or nothing)
24
25 BOOST_CLBL_TRTS_IS_NOEXCEPT - `std::true_type` or `std::false_type`,
26 tied on whether BOOST_CLBL_TRTS_NOEXCEPT_SPEC is `noexcept`
27
28 BOOST_CLBL_TRTS_NOEXCEPT_SPECIFIER - `noexcept` if
29 BOOST_CLBL_TRTS_ENABLE_NOEXCEPT_TYPES is defined, otherwise nothing
30 */
31
32 template<typename Return, typename T, typename... Args>
33 struct pmf<Return(BOOST_CLBL_TRTS_VARARGS_CC T::*)(Args..., ...)
34 BOOST_CLBL_TRTS_INCLUDE_QUALIFIERS
35 BOOST_CLBL_TRTS_INCLUDE_TRANSACTION_SAFE
36 BOOST_CLBL_TRTS_NOEXCEPT_SPEC>
37 : default_callable_traits<dummy BOOST_CLBL_TRTS_INCLUDE_QUALIFIERS> {
38
39 static constexpr bool value = true;
40
41 using has_varargs = std::true_type;
42
43 using traits = pmf;
44
45 using return_type = Return;
46
47 using type = Return(BOOST_CLBL_TRTS_VARARGS_CC T::*)(Args..., ...)
48 BOOST_CLBL_TRTS_INCLUDE_QUALIFIERS
49 BOOST_CLBL_TRTS_INCLUDE_TRANSACTION_SAFE
50 BOOST_CLBL_TRTS_NOEXCEPT_SPEC;
51
52 using invoke_type = typename std::conditional<
53 std::is_rvalue_reference<T BOOST_CLBL_TRTS_INCLUDE_QUALIFIERS>::value,
54 T BOOST_CLBL_TRTS_INCLUDE_QUALIFIERS,
55 typename std::add_lvalue_reference<T BOOST_CLBL_TRTS_INCLUDE_QUALIFIERS>::type
56 >::type;
57
58 using arg_types = std::tuple<invoke_type, Args...>;
59 using non_invoke_arg_types = std::tuple<Args...>;
60
61 using function_object_signature = Return(Args..., ...);
62
63 using function_type = Return(invoke_type, Args..., ...);
64
65 using qualified_function_type = Return(Args..., ...)
66 BOOST_CLBL_TRTS_INCLUDE_ABOMINABLE_QUALIFIERS
67 BOOST_CLBL_TRTS_INCLUDE_TRANSACTION_SAFE
68 BOOST_CLBL_TRTS_NOEXCEPT_SPEC;
69
70 using remove_varargs =
71 Return(BOOST_CLBL_TRTS_CC T::*)(Args...)
72 BOOST_CLBL_TRTS_INCLUDE_QUALIFIERS
73 BOOST_CLBL_TRTS_INCLUDE_TRANSACTION_SAFE
74 BOOST_CLBL_TRTS_NOEXCEPT_SPEC;
75
76 using add_varargs = type;
77
78 using is_noexcept = BOOST_CLBL_TRTS_IS_NOEXCEPT;
79
80 using remove_noexcept = Return(BOOST_CLBL_TRTS_CC T::*)(Args..., ...)
81 BOOST_CLBL_TRTS_INCLUDE_QUALIFIERS
82 BOOST_CLBL_TRTS_INCLUDE_TRANSACTION_SAFE;
83
84 using add_noexcept = Return(BOOST_CLBL_TRTS_CC T::*)(Args..., ...)
85 BOOST_CLBL_TRTS_INCLUDE_QUALIFIERS
86 BOOST_CLBL_TRTS_INCLUDE_TRANSACTION_SAFE
87 BOOST_CLBL_TRTS_NOEXCEPT_SPECIFIER;
88
89 using is_transaction_safe = BOOST_CLBL_TRTS_IS_TRANSACTION_SAFE;
90
91 using remove_transaction_safe = Return(BOOST_CLBL_TRTS_VARARGS_CC T::*)(Args..., ...)
92 BOOST_CLBL_TRTS_INCLUDE_QUALIFIERS
93 BOOST_CLBL_TRTS_NOEXCEPT_SPEC;
94
95 using add_transaction_safe = Return(BOOST_CLBL_TRTS_VARARGS_CC T::*)(Args..., ...)
96 BOOST_CLBL_TRTS_INCLUDE_QUALIFIERS
97 BOOST_CLBL_TRTS_TRANSACTION_SAFE_SPECIFIER
98 BOOST_CLBL_TRTS_NOEXCEPT_SPEC;
99
100 using class_type = T;
101
102 using qualifiers = default_callable_traits<dummy BOOST_CLBL_TRTS_INCLUDE_QUALIFIERS>;
103
104 template<qualifier_flags Flags>
105 using set_qualifiers = set_varargs_member_function_qualifiers<
106 Flags, is_transaction_safe::value, is_noexcept::value,
107 BOOST_CLBL_TRTS_CC_TAG, T, Return, Args...>;
108
109 using remove_member_reference = set_qualifiers<qualifiers::cv_flags>;
110
111 using add_member_lvalue_reference = set_qualifiers<
112 collapse_flags<qualifiers::q_flags, lref_>::value>;
113
114 using add_member_rvalue_reference = set_qualifiers<
115 collapse_flags<qualifiers::q_flags, rref_>::value>;
116
117 using add_member_const = set_qualifiers<qualifiers::q_flags | const_>;
118
119 using add_member_volatile = set_qualifiers<qualifiers::q_flags | volatile_>;
120
121 using add_member_cv = set_qualifiers<qualifiers::q_flags | cv_>;
122
123 using remove_member_const = set_qualifiers<
124 qualifiers::ref_flags | remove_const_flag<qualifiers::cv_flags>::value>;
125
126 using remove_member_volatile = set_qualifiers<
127 qualifiers::ref_flags | remove_volatile_flag<qualifiers::cv_flags>::value>;
128
129 using remove_member_cv = set_qualifiers<qualifiers::ref_flags>;
130
131 template<typename U>
132 using apply_member_pointer =
133 Return(BOOST_CLBL_TRTS_VARARGS_CC U::*)(Args..., ...)
134 BOOST_CLBL_TRTS_INCLUDE_QUALIFIERS
135 BOOST_CLBL_TRTS_INCLUDE_TRANSACTION_SAFE
136 BOOST_CLBL_TRTS_NOEXCEPT_SPEC;
137
138 template<typename NewReturn>
139 using apply_return =
140 NewReturn(BOOST_CLBL_TRTS_VARARGS_CC T::*)(Args..., ...)
141 BOOST_CLBL_TRTS_INCLUDE_QUALIFIERS
142 BOOST_CLBL_TRTS_INCLUDE_TRANSACTION_SAFE
143 BOOST_CLBL_TRTS_NOEXCEPT_SPEC;
144
145 template<template<class...> class Container>
146 using expand_args = Container<invoke_type, Args...>;
147
148 using is_member_pointer = std::true_type;
149 };