|
11 | 11 | #define _LIBCPP___TYPE_TRAITS_INVOKE_H
|
12 | 12 |
|
13 | 13 | #include <__config>
|
14 |
| -#include <__type_traits/add_lvalue_reference.h> |
15 |
| -#include <__type_traits/apply_cv.h> |
16 | 14 | #include <__type_traits/conditional.h>
|
17 | 15 | #include <__type_traits/decay.h>
|
18 | 16 | #include <__type_traits/enable_if.h>
|
|
25 | 23 | #include <__type_traits/is_same.h>
|
26 | 24 | #include <__type_traits/is_void.h>
|
27 | 25 | #include <__type_traits/nat.h>
|
28 |
| -#include <__type_traits/remove_cv.h> |
29 | 26 | #include <__utility/declval.h>
|
30 | 27 | #include <__utility/forward.h>
|
31 | 28 |
|
|
35 | 32 |
|
36 | 33 | _LIBCPP_BEGIN_NAMESPACE_STD
|
37 | 34 |
|
38 |
| -struct __any { |
39 |
| - __any(...); |
40 |
| -}; |
41 |
| - |
42 |
| -template <class _MP, bool _IsMemberFunctionPtr, bool _IsMemberObjectPtr> |
43 |
| -struct __member_pointer_traits_imp {}; |
44 |
| - |
45 |
| -template <class _Rp, class _Class, class... _Param> |
46 |
| -struct __member_pointer_traits_imp<_Rp (_Class::*)(_Param...), true, false> { |
47 |
| - typedef _Class _ClassType; |
48 |
| - typedef _Rp _ReturnType; |
49 |
| - typedef _Rp(_FnType)(_Param...); |
50 |
| -}; |
51 |
| - |
52 |
| -template <class _Rp, class _Class, class... _Param> |
53 |
| -struct __member_pointer_traits_imp<_Rp (_Class::*)(_Param..., ...), true, false> { |
54 |
| - typedef _Class _ClassType; |
55 |
| - typedef _Rp _ReturnType; |
56 |
| - typedef _Rp(_FnType)(_Param..., ...); |
57 |
| -}; |
58 |
| - |
59 |
| -template <class _Rp, class _Class, class... _Param> |
60 |
| -struct __member_pointer_traits_imp<_Rp (_Class::*)(_Param...) const, true, false> { |
61 |
| - typedef _Class const _ClassType; |
62 |
| - typedef _Rp _ReturnType; |
63 |
| - typedef _Rp(_FnType)(_Param...); |
64 |
| -}; |
65 |
| - |
66 |
| -template <class _Rp, class _Class, class... _Param> |
67 |
| -struct __member_pointer_traits_imp<_Rp (_Class::*)(_Param..., ...) const, true, false> { |
68 |
| - typedef _Class const _ClassType; |
69 |
| - typedef _Rp _ReturnType; |
70 |
| - typedef _Rp(_FnType)(_Param..., ...); |
71 |
| -}; |
72 |
| - |
73 |
| -template <class _Rp, class _Class, class... _Param> |
74 |
| -struct __member_pointer_traits_imp<_Rp (_Class::*)(_Param...) volatile, true, false> { |
75 |
| - typedef _Class volatile _ClassType; |
76 |
| - typedef _Rp _ReturnType; |
77 |
| - typedef _Rp(_FnType)(_Param...); |
78 |
| -}; |
79 |
| - |
80 |
| -template <class _Rp, class _Class, class... _Param> |
81 |
| -struct __member_pointer_traits_imp<_Rp (_Class::*)(_Param..., ...) volatile, true, false> { |
82 |
| - typedef _Class volatile _ClassType; |
83 |
| - typedef _Rp _ReturnType; |
84 |
| - typedef _Rp(_FnType)(_Param..., ...); |
85 |
| -}; |
86 |
| - |
87 |
| -template <class _Rp, class _Class, class... _Param> |
88 |
| -struct __member_pointer_traits_imp<_Rp (_Class::*)(_Param...) const volatile, true, false> { |
89 |
| - typedef _Class const volatile _ClassType; |
90 |
| - typedef _Rp _ReturnType; |
91 |
| - typedef _Rp(_FnType)(_Param...); |
92 |
| -}; |
93 |
| - |
94 |
| -template <class _Rp, class _Class, class... _Param> |
95 |
| -struct __member_pointer_traits_imp<_Rp (_Class::*)(_Param..., ...) const volatile, true, false> { |
96 |
| - typedef _Class const volatile _ClassType; |
97 |
| - typedef _Rp _ReturnType; |
98 |
| - typedef _Rp(_FnType)(_Param..., ...); |
99 |
| -}; |
100 |
| - |
101 |
| -template <class _Rp, class _Class, class... _Param> |
102 |
| -struct __member_pointer_traits_imp<_Rp (_Class::*)(_Param...)&, true, false> { |
103 |
| - typedef _Class& _ClassType; |
104 |
| - typedef _Rp _ReturnType; |
105 |
| - typedef _Rp(_FnType)(_Param...); |
106 |
| -}; |
107 |
| - |
108 |
| -template <class _Rp, class _Class, class... _Param> |
109 |
| -struct __member_pointer_traits_imp<_Rp (_Class::*)(_Param..., ...)&, true, false> { |
110 |
| - typedef _Class& _ClassType; |
111 |
| - typedef _Rp _ReturnType; |
112 |
| - typedef _Rp(_FnType)(_Param..., ...); |
113 |
| -}; |
114 |
| - |
115 |
| -template <class _Rp, class _Class, class... _Param> |
116 |
| -struct __member_pointer_traits_imp<_Rp (_Class::*)(_Param...) const&, true, false> { |
117 |
| - typedef _Class const& _ClassType; |
118 |
| - typedef _Rp _ReturnType; |
119 |
| - typedef _Rp(_FnType)(_Param...); |
120 |
| -}; |
121 |
| - |
122 |
| -template <class _Rp, class _Class, class... _Param> |
123 |
| -struct __member_pointer_traits_imp<_Rp (_Class::*)(_Param..., ...) const&, true, false> { |
124 |
| - typedef _Class const& _ClassType; |
125 |
| - typedef _Rp _ReturnType; |
126 |
| - typedef _Rp(_FnType)(_Param..., ...); |
127 |
| -}; |
128 |
| - |
129 |
| -template <class _Rp, class _Class, class... _Param> |
130 |
| -struct __member_pointer_traits_imp<_Rp (_Class::*)(_Param...) volatile&, true, false> { |
131 |
| - typedef _Class volatile& _ClassType; |
132 |
| - typedef _Rp _ReturnType; |
133 |
| - typedef _Rp(_FnType)(_Param...); |
134 |
| -}; |
135 |
| - |
136 |
| -template <class _Rp, class _Class, class... _Param> |
137 |
| -struct __member_pointer_traits_imp<_Rp (_Class::*)(_Param..., ...) volatile&, true, false> { |
138 |
| - typedef _Class volatile& _ClassType; |
139 |
| - typedef _Rp _ReturnType; |
140 |
| - typedef _Rp(_FnType)(_Param..., ...); |
141 |
| -}; |
142 |
| - |
143 |
| -template <class _Rp, class _Class, class... _Param> |
144 |
| -struct __member_pointer_traits_imp<_Rp (_Class::*)(_Param...) const volatile&, true, false> { |
145 |
| - typedef _Class const volatile& _ClassType; |
146 |
| - typedef _Rp _ReturnType; |
147 |
| - typedef _Rp(_FnType)(_Param...); |
148 |
| -}; |
149 |
| - |
150 |
| -template <class _Rp, class _Class, class... _Param> |
151 |
| -struct __member_pointer_traits_imp<_Rp (_Class::*)(_Param..., ...) const volatile&, true, false> { |
152 |
| - typedef _Class const volatile& _ClassType; |
153 |
| - typedef _Rp _ReturnType; |
154 |
| - typedef _Rp(_FnType)(_Param..., ...); |
155 |
| -}; |
156 |
| - |
157 |
| -template <class _Rp, class _Class, class... _Param> |
158 |
| -struct __member_pointer_traits_imp<_Rp (_Class::*)(_Param...)&&, true, false> { |
159 |
| - typedef _Class&& _ClassType; |
160 |
| - typedef _Rp _ReturnType; |
161 |
| - typedef _Rp(_FnType)(_Param...); |
162 |
| -}; |
163 |
| - |
164 |
| -template <class _Rp, class _Class, class... _Param> |
165 |
| -struct __member_pointer_traits_imp<_Rp (_Class::*)(_Param..., ...)&&, true, false> { |
166 |
| - typedef _Class&& _ClassType; |
167 |
| - typedef _Rp _ReturnType; |
168 |
| - typedef _Rp(_FnType)(_Param..., ...); |
169 |
| -}; |
170 |
| - |
171 |
| -template <class _Rp, class _Class, class... _Param> |
172 |
| -struct __member_pointer_traits_imp<_Rp (_Class::*)(_Param...) const&&, true, false> { |
173 |
| - typedef _Class const&& _ClassType; |
174 |
| - typedef _Rp _ReturnType; |
175 |
| - typedef _Rp(_FnType)(_Param...); |
176 |
| -}; |
177 |
| - |
178 |
| -template <class _Rp, class _Class, class... _Param> |
179 |
| -struct __member_pointer_traits_imp<_Rp (_Class::*)(_Param..., ...) const&&, true, false> { |
180 |
| - typedef _Class const&& _ClassType; |
181 |
| - typedef _Rp _ReturnType; |
182 |
| - typedef _Rp(_FnType)(_Param..., ...); |
183 |
| -}; |
184 |
| - |
185 |
| -template <class _Rp, class _Class, class... _Param> |
186 |
| -struct __member_pointer_traits_imp<_Rp (_Class::*)(_Param...) volatile&&, true, false> { |
187 |
| - typedef _Class volatile&& _ClassType; |
188 |
| - typedef _Rp _ReturnType; |
189 |
| - typedef _Rp(_FnType)(_Param...); |
190 |
| -}; |
191 |
| - |
192 |
| -template <class _Rp, class _Class, class... _Param> |
193 |
| -struct __member_pointer_traits_imp<_Rp (_Class::*)(_Param..., ...) volatile&&, true, false> { |
194 |
| - typedef _Class volatile&& _ClassType; |
195 |
| - typedef _Rp _ReturnType; |
196 |
| - typedef _Rp(_FnType)(_Param..., ...); |
197 |
| -}; |
198 |
| - |
199 |
| -template <class _Rp, class _Class, class... _Param> |
200 |
| -struct __member_pointer_traits_imp<_Rp (_Class::*)(_Param...) const volatile&&, true, false> { |
201 |
| - typedef _Class const volatile&& _ClassType; |
202 |
| - typedef _Rp _ReturnType; |
203 |
| - typedef _Rp(_FnType)(_Param...); |
204 |
| -}; |
205 |
| - |
206 |
| -template <class _Rp, class _Class, class... _Param> |
207 |
| -struct __member_pointer_traits_imp<_Rp (_Class::*)(_Param..., ...) const volatile&&, true, false> { |
208 |
| - typedef _Class const volatile&& _ClassType; |
209 |
| - typedef _Rp _ReturnType; |
210 |
| - typedef _Rp(_FnType)(_Param..., ...); |
211 |
| -}; |
212 |
| - |
213 |
| -template <class _Rp, class _Class> |
214 |
| -struct __member_pointer_traits_imp<_Rp _Class::*, false, true> { |
215 |
| - typedef _Class _ClassType; |
216 |
| - typedef _Rp _ReturnType; |
217 |
| -}; |
218 |
| - |
219 |
| -template <class _MP> |
220 |
| -struct __member_pointer_traits |
221 |
| - : public __member_pointer_traits_imp<__remove_cv_t<_MP>, |
222 |
| - is_member_function_pointer<_MP>::value, |
223 |
| - is_member_object_pointer<_MP>::value> { |
224 |
| - // typedef ... _ClassType; |
225 |
| - // typedef ... _ReturnType; |
226 |
| - // typedef ... _FnType; |
227 |
| -}; |
228 |
| - |
229 | 35 | template <class _DecayedFp>
|
230 | 36 | struct __member_pointer_class_type {};
|
231 | 37 |
|
@@ -285,7 +91,7 @@ using __enable_if_bullet6 =
|
285 | 91 | // fall back - none of the bullets
|
286 | 92 |
|
287 | 93 | template <class... _Args>
|
288 |
| -__nat __invoke(__any, _Args&&... __args); |
| 94 | +__nat __invoke(_Args&&... __args); |
289 | 95 |
|
290 | 96 | // bullets 1, 2 and 3
|
291 | 97 |
|
|
0 commit comments