Classdesc 3.44
functiondb10.h
1#ifndef CLASSDESC_FUNCTIONDB10
2#define CLASSDESC_FUNCTIONDB10
3template <class R, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9, class A10>
4struct Arg<R (*)(A1,A2,A3,A4,A5,A6,A7,A8,A9,A10), 1>
5{
6 typedef A1 T;
7 typedef T type;
8};
9
10template <class C, class R, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9, class A10>
11struct Arg<R (C::*)(A1,A2,A3,A4,A5,A6,A7,A8,A9,A10), 1>
12{
13 typedef A1 T;
14 typedef T type;
15};
16
17template <class C, class R, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9, class A10>
18struct Arg<R (C::*)(A1,A2,A3,A4,A5,A6,A7,A8,A9,A10) const, 1>
19{
20 typedef A1 T;
21 typedef T type;
22};
23
24#if defined(__cplusplus) && __cplusplus>=201703L
25// noexcept methods
26template <class R, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9, class A10>
27struct Arg<R (*)(A1,A2,A3,A4,A5,A6,A7,A8,A9,A10) noexcept, 1>
28{
29 typedef A1 T;
30 typedef T type;
31};
32
33template <class C, class R, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9, class A10>
34struct Arg<R (C::*)(A1,A2,A3,A4,A5,A6,A7,A8,A9,A10) noexcept, 1>
35{
36 typedef A1 T;
37 typedef T type;
38};
39
40template <class C, class R, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9, class A10>
41struct Arg<R (C::*)(A1,A2,A3,A4,A5,A6,A7,A8,A9,A10) const noexcept, 1>
42{
43 typedef A1 T;
44 typedef T type;
45};
46#endif
47template <class R, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9, class A10>
48struct Arg<R (*)(A1,A2,A3,A4,A5,A6,A7,A8,A9,A10), 2>
49{
50 typedef A2 T;
51 typedef T type;
52};
53
54template <class C, class R, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9, class A10>
55struct Arg<R (C::*)(A1,A2,A3,A4,A5,A6,A7,A8,A9,A10), 2>
56{
57 typedef A2 T;
58 typedef T type;
59};
60
61template <class C, class R, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9, class A10>
62struct Arg<R (C::*)(A1,A2,A3,A4,A5,A6,A7,A8,A9,A10) const, 2>
63{
64 typedef A2 T;
65 typedef T type;
66};
67
68#if defined(__cplusplus) && __cplusplus>=201703L
69// noexcept methods
70template <class R, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9, class A10>
71struct Arg<R (*)(A1,A2,A3,A4,A5,A6,A7,A8,A9,A10) noexcept, 2>
72{
73 typedef A2 T;
74 typedef T type;
75};
76
77template <class C, class R, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9, class A10>
78struct Arg<R (C::*)(A1,A2,A3,A4,A5,A6,A7,A8,A9,A10) noexcept, 2>
79{
80 typedef A2 T;
81 typedef T type;
82};
83
84template <class C, class R, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9, class A10>
85struct Arg<R (C::*)(A1,A2,A3,A4,A5,A6,A7,A8,A9,A10) const noexcept, 2>
86{
87 typedef A2 T;
88 typedef T type;
89};
90#endif
91template <class R, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9, class A10>
92struct Arg<R (*)(A1,A2,A3,A4,A5,A6,A7,A8,A9,A10), 3>
93{
94 typedef A3 T;
95 typedef T type;
96};
97
98template <class C, class R, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9, class A10>
99struct Arg<R (C::*)(A1,A2,A3,A4,A5,A6,A7,A8,A9,A10), 3>
100{
101 typedef A3 T;
102 typedef T type;
103};
104
105template <class C, class R, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9, class A10>
106struct Arg<R (C::*)(A1,A2,A3,A4,A5,A6,A7,A8,A9,A10) const, 3>
107{
108 typedef A3 T;
109 typedef T type;
110};
111
112#if defined(__cplusplus) && __cplusplus>=201703L
113// noexcept methods
114template <class R, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9, class A10>
115struct Arg<R (*)(A1,A2,A3,A4,A5,A6,A7,A8,A9,A10) noexcept, 3>
116{
117 typedef A3 T;
118 typedef T type;
119};
120
121template <class C, class R, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9, class A10>
122struct Arg<R (C::*)(A1,A2,A3,A4,A5,A6,A7,A8,A9,A10) noexcept, 3>
123{
124 typedef A3 T;
125 typedef T type;
126};
127
128template <class C, class R, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9, class A10>
129struct Arg<R (C::*)(A1,A2,A3,A4,A5,A6,A7,A8,A9,A10) const noexcept, 3>
130{
131 typedef A3 T;
132 typedef T type;
133};
134#endif
135template <class R, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9, class A10>
136struct Arg<R (*)(A1,A2,A3,A4,A5,A6,A7,A8,A9,A10), 4>
137{
138 typedef A4 T;
139 typedef T type;
140};
141
142template <class C, class R, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9, class A10>
143struct Arg<R (C::*)(A1,A2,A3,A4,A5,A6,A7,A8,A9,A10), 4>
144{
145 typedef A4 T;
146 typedef T type;
147};
148
149template <class C, class R, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9, class A10>
150struct Arg<R (C::*)(A1,A2,A3,A4,A5,A6,A7,A8,A9,A10) const, 4>
151{
152 typedef A4 T;
153 typedef T type;
154};
155
156#if defined(__cplusplus) && __cplusplus>=201703L
157// noexcept methods
158template <class R, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9, class A10>
159struct Arg<R (*)(A1,A2,A3,A4,A5,A6,A7,A8,A9,A10) noexcept, 4>
160{
161 typedef A4 T;
162 typedef T type;
163};
164
165template <class C, class R, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9, class A10>
166struct Arg<R (C::*)(A1,A2,A3,A4,A5,A6,A7,A8,A9,A10) noexcept, 4>
167{
168 typedef A4 T;
169 typedef T type;
170};
171
172template <class C, class R, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9, class A10>
173struct Arg<R (C::*)(A1,A2,A3,A4,A5,A6,A7,A8,A9,A10) const noexcept, 4>
174{
175 typedef A4 T;
176 typedef T type;
177};
178#endif
179template <class R, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9, class A10>
180struct Arg<R (*)(A1,A2,A3,A4,A5,A6,A7,A8,A9,A10), 5>
181{
182 typedef A5 T;
183 typedef T type;
184};
185
186template <class C, class R, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9, class A10>
187struct Arg<R (C::*)(A1,A2,A3,A4,A5,A6,A7,A8,A9,A10), 5>
188{
189 typedef A5 T;
190 typedef T type;
191};
192
193template <class C, class R, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9, class A10>
194struct Arg<R (C::*)(A1,A2,A3,A4,A5,A6,A7,A8,A9,A10) const, 5>
195{
196 typedef A5 T;
197 typedef T type;
198};
199
200#if defined(__cplusplus) && __cplusplus>=201703L
201// noexcept methods
202template <class R, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9, class A10>
203struct Arg<R (*)(A1,A2,A3,A4,A5,A6,A7,A8,A9,A10) noexcept, 5>
204{
205 typedef A5 T;
206 typedef T type;
207};
208
209template <class C, class R, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9, class A10>
210struct Arg<R (C::*)(A1,A2,A3,A4,A5,A6,A7,A8,A9,A10) noexcept, 5>
211{
212 typedef A5 T;
213 typedef T type;
214};
215
216template <class C, class R, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9, class A10>
217struct Arg<R (C::*)(A1,A2,A3,A4,A5,A6,A7,A8,A9,A10) const noexcept, 5>
218{
219 typedef A5 T;
220 typedef T type;
221};
222#endif
223template <class R, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9, class A10>
224struct Arg<R (*)(A1,A2,A3,A4,A5,A6,A7,A8,A9,A10), 6>
225{
226 typedef A6 T;
227 typedef T type;
228};
229
230template <class C, class R, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9, class A10>
231struct Arg<R (C::*)(A1,A2,A3,A4,A5,A6,A7,A8,A9,A10), 6>
232{
233 typedef A6 T;
234 typedef T type;
235};
236
237template <class C, class R, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9, class A10>
238struct Arg<R (C::*)(A1,A2,A3,A4,A5,A6,A7,A8,A9,A10) const, 6>
239{
240 typedef A6 T;
241 typedef T type;
242};
243
244#if defined(__cplusplus) && __cplusplus>=201703L
245// noexcept methods
246template <class R, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9, class A10>
247struct Arg<R (*)(A1,A2,A3,A4,A5,A6,A7,A8,A9,A10) noexcept, 6>
248{
249 typedef A6 T;
250 typedef T type;
251};
252
253template <class C, class R, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9, class A10>
254struct Arg<R (C::*)(A1,A2,A3,A4,A5,A6,A7,A8,A9,A10) noexcept, 6>
255{
256 typedef A6 T;
257 typedef T type;
258};
259
260template <class C, class R, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9, class A10>
261struct Arg<R (C::*)(A1,A2,A3,A4,A5,A6,A7,A8,A9,A10) const noexcept, 6>
262{
263 typedef A6 T;
264 typedef T type;
265};
266#endif
267template <class R, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9, class A10>
268struct Arg<R (*)(A1,A2,A3,A4,A5,A6,A7,A8,A9,A10), 7>
269{
270 typedef A7 T;
271 typedef T type;
272};
273
274template <class C, class R, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9, class A10>
275struct Arg<R (C::*)(A1,A2,A3,A4,A5,A6,A7,A8,A9,A10), 7>
276{
277 typedef A7 T;
278 typedef T type;
279};
280
281template <class C, class R, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9, class A10>
282struct Arg<R (C::*)(A1,A2,A3,A4,A5,A6,A7,A8,A9,A10) const, 7>
283{
284 typedef A7 T;
285 typedef T type;
286};
287
288#if defined(__cplusplus) && __cplusplus>=201703L
289// noexcept methods
290template <class R, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9, class A10>
291struct Arg<R (*)(A1,A2,A3,A4,A5,A6,A7,A8,A9,A10) noexcept, 7>
292{
293 typedef A7 T;
294 typedef T type;
295};
296
297template <class C, class R, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9, class A10>
298struct Arg<R (C::*)(A1,A2,A3,A4,A5,A6,A7,A8,A9,A10) noexcept, 7>
299{
300 typedef A7 T;
301 typedef T type;
302};
303
304template <class C, class R, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9, class A10>
305struct Arg<R (C::*)(A1,A2,A3,A4,A5,A6,A7,A8,A9,A10) const noexcept, 7>
306{
307 typedef A7 T;
308 typedef T type;
309};
310#endif
311template <class R, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9, class A10>
312struct Arg<R (*)(A1,A2,A3,A4,A5,A6,A7,A8,A9,A10), 8>
313{
314 typedef A8 T;
315 typedef T type;
316};
317
318template <class C, class R, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9, class A10>
319struct Arg<R (C::*)(A1,A2,A3,A4,A5,A6,A7,A8,A9,A10), 8>
320{
321 typedef A8 T;
322 typedef T type;
323};
324
325template <class C, class R, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9, class A10>
326struct Arg<R (C::*)(A1,A2,A3,A4,A5,A6,A7,A8,A9,A10) const, 8>
327{
328 typedef A8 T;
329 typedef T type;
330};
331
332#if defined(__cplusplus) && __cplusplus>=201703L
333// noexcept methods
334template <class R, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9, class A10>
335struct Arg<R (*)(A1,A2,A3,A4,A5,A6,A7,A8,A9,A10) noexcept, 8>
336{
337 typedef A8 T;
338 typedef T type;
339};
340
341template <class C, class R, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9, class A10>
342struct Arg<R (C::*)(A1,A2,A3,A4,A5,A6,A7,A8,A9,A10) noexcept, 8>
343{
344 typedef A8 T;
345 typedef T type;
346};
347
348template <class C, class R, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9, class A10>
349struct Arg<R (C::*)(A1,A2,A3,A4,A5,A6,A7,A8,A9,A10) const noexcept, 8>
350{
351 typedef A8 T;
352 typedef T type;
353};
354#endif
355template <class R, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9, class A10>
356struct Arg<R (*)(A1,A2,A3,A4,A5,A6,A7,A8,A9,A10), 9>
357{
358 typedef A9 T;
359 typedef T type;
360};
361
362template <class C, class R, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9, class A10>
363struct Arg<R (C::*)(A1,A2,A3,A4,A5,A6,A7,A8,A9,A10), 9>
364{
365 typedef A9 T;
366 typedef T type;
367};
368
369template <class C, class R, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9, class A10>
370struct Arg<R (C::*)(A1,A2,A3,A4,A5,A6,A7,A8,A9,A10) const, 9>
371{
372 typedef A9 T;
373 typedef T type;
374};
375
376#if defined(__cplusplus) && __cplusplus>=201703L
377// noexcept methods
378template <class R, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9, class A10>
379struct Arg<R (*)(A1,A2,A3,A4,A5,A6,A7,A8,A9,A10) noexcept, 9>
380{
381 typedef A9 T;
382 typedef T type;
383};
384
385template <class C, class R, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9, class A10>
386struct Arg<R (C::*)(A1,A2,A3,A4,A5,A6,A7,A8,A9,A10) noexcept, 9>
387{
388 typedef A9 T;
389 typedef T type;
390};
391
392template <class C, class R, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9, class A10>
393struct Arg<R (C::*)(A1,A2,A3,A4,A5,A6,A7,A8,A9,A10) const noexcept, 9>
394{
395 typedef A9 T;
396 typedef T type;
397};
398#endif
399template <class R, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9, class A10>
400struct Arg<R (*)(A1,A2,A3,A4,A5,A6,A7,A8,A9,A10), 10>
401{
402 typedef A10 T;
403 typedef T type;
404};
405
406template <class C, class R, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9, class A10>
407struct Arg<R (C::*)(A1,A2,A3,A4,A5,A6,A7,A8,A9,A10), 10>
408{
409 typedef A10 T;
410 typedef T type;
411};
412
413template <class C, class R, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9, class A10>
414struct Arg<R (C::*)(A1,A2,A3,A4,A5,A6,A7,A8,A9,A10) const, 10>
415{
416 typedef A10 T;
417 typedef T type;
418};
419
420#if defined(__cplusplus) && __cplusplus>=201703L
421// noexcept methods
422template <class R, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9, class A10>
423struct Arg<R (*)(A1,A2,A3,A4,A5,A6,A7,A8,A9,A10) noexcept, 10>
424{
425 typedef A10 T;
426 typedef T type;
427};
428
429template <class C, class R, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9, class A10>
430struct Arg<R (C::*)(A1,A2,A3,A4,A5,A6,A7,A8,A9,A10) noexcept, 10>
431{
432 typedef A10 T;
433 typedef T type;
434};
435
436template <class C, class R, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9, class A10>
437struct Arg<R (C::*)(A1,A2,A3,A4,A5,A6,A7,A8,A9,A10) const noexcept, 10>
438{
439 typedef A10 T;
440 typedef T type;
441};
442#endif
443template <class F, template<class> class P>
444struct AllArgs<F,P,10>
445{
446 static const bool value=true && P<typename Arg<F,1>::T>::value && P<typename Arg<F,2>::T>::value && P<typename Arg<F,3>::T>::value && P<typename Arg<F,4>::T>::value && P<typename Arg<F,5>::T>::value && P<typename Arg<F,6>::T>::value && P<typename Arg<F,7>::T>::value && P<typename Arg<F,8>::T>::value && P<typename Arg<F,9>::T>::value && P<typename Arg<F,10>::T>::value;
447};
448
449
450template <class R, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9, class A10>
451struct Arity<R (*)(A1,A2,A3,A4,A5,A6,A7,A8,A9,A10)>
452{
453 static const int V=10;
454 static const int value=10;
455};
456
457template <class R, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9, class A10>
458struct Return<R (*)(A1,A2,A3,A4,A5,A6,A7,A8,A9,A10)>
459{
460 typedef R T;
461 typedef R type;
462};
463
464template <class C,class R, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9, class A10>
465struct Arity<R (* C::*)(A1,A2,A3,A4,A5,A6,A7,A8,A9,A10)>
466{
467 static const int V=10;
468 static const int value=10;
469};
470
471template <class C,class R, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9, class A10>
472struct Return<R (* C::*)(A1,A2,A3,A4,A5,A6,A7,A8,A9,A10)>
473{
474 typedef R T;
475 typedef R type;
476};
477
478template <class C, class R, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9, class A10>
479struct Arity<R (C::*)(A1,A2,A3,A4,A5,A6,A7,A8,A9,A10)>
480{
481 static const int V=10;
482 static const int value=10;
483};
484
485template <class C, class R, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9, class A10>
486struct Return<R (C::*)(A1,A2,A3,A4,A5,A6,A7,A8,A9,A10)>
487{
488 typedef R T;
489 typedef R type;
490};
491
492template <class C, class R, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9, class A10>
493struct Arity<R (C::*)(A1,A2,A3,A4,A5,A6,A7,A8,A9,A10) const>
494{
495 static const int V=10;
496 static const int value=10;
497};
498
499template <class C, class R, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9, class A10>
500struct Return<R (C::*)(A1,A2,A3,A4,A5,A6,A7,A8,A9,A10) const>
501{
502 typedef R T;
503 typedef R type;
504};
505
506template <class C, class R, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9, class A10>
507struct ClassOf<R (C::*)(A1,A2,A3,A4,A5,A6,A7,A8,A9,A10)>
508{
509 typedef C T;
510 typedef C type;
511};
512
513template <class C, class R, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9, class A10>
514struct ClassOf<R (*C::*)(A1,A2,A3,A4,A5,A6,A7,A8,A9,A10)>
515{
516 typedef C T;
517 typedef C type;
518};
519
520template <class C, class R, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9, class A10>
521struct ClassOf<R (C::*)(A1,A2,A3,A4,A5,A6,A7,A8,A9,A10) const>
522{
523 typedef C T;
524 typedef C type;
525};
526
527template <class C, class R, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9, class A10>
528struct is_member_function_ptr<R (C::*)(A1,A2,A3,A4,A5,A6,A7,A8,A9,A10)>
529{
530 static const bool value=true;
531};
532
533template <class C, class R, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9, class A10>
534struct is_member_function_ptr<R (C::*)(A1,A2,A3,A4,A5,A6,A7,A8,A9,A10) const>
535{
536 static const bool value=true;
537};
538
539template <class C, class R, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9, class A10>
540struct is_const_method<R (C::*)(A1,A2,A3,A4,A5,A6,A7,A8,A9,A10) const>
541{
542 static const bool value=true;
543};
544
545template <class R, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9, class A10>
546struct is_nonmember_function_ptr<R (*)(A1,A2,A3,A4,A5,A6,A7,A8,A9,A10)>
547{
548 static const bool value=true;
549};
550
551template <class C, class R, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9, class A10>
552struct is_nonmember_function_ptr<R (*C::*)(A1,A2,A3,A4,A5,A6,A7,A8,A9,A10)>
553{
554 static const bool value=true;
555};
556
557template <class C, class D, class R, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9, class A10>
558class bound_method<C, R (D::*)(A1,A2,A3,A4,A5,A6,A7,A8,A9,A10)>
559{
560 typedef R (D::*M)(A1,A2,A3,A4,A5,A6,A7,A8,A9,A10);
561 C* obj;
562 M method;
563 public:
564 static const int arity=10;
565 typedef R Ret;
566 template <int i> struct Arg: public functional::Arg<M,i> {};
567 bound_method(C& obj, M method): obj(&obj), method(method) {}
568 typename enable_if<Not<classdesc::is_const<C> >, R>::T
569 operator()(A1 a1,A2 a2,A3 a3,A4 a4,A5 a5,A6 a6,A7 a7,A8 a8,A9 a9,A10 a10) const {return (obj->*method)(a1,a2,a3,a4,a5,a6,a7,a8,a9,a10);}
570 void rebind(C& newObj) {obj=&newObj;}
571 static const bool is_const=false;
572};
573
574template <class C, class D, class R, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9, class A10>
575class bound_method<const C, R (D::*)(A1,A2,A3,A4,A5,A6,A7,A8,A9,A10)>
576{
577 typedef R (D::*M)(A1,A2,A3,A4,A5,A6,A7,A8,A9,A10);
578 const C* obj;
579 M method;
580 public:
581 static const int arity=10;
582 typedef R Ret;
583 template <int i> struct Arg: public functional::Arg<M,i> {};
584 bound_method(const C& obj, M method): obj(&obj), method(method) {}
585 R operator()(A1 a1,A2 a2,A3 a3,A4 a4,A5 a5,A6 a6,A7 a7,A8 a8,A9 a9,A10 a10) const {
586 throw std::runtime_error("cannot call method, inappropriate argument type");
587 }
588 void rebind(C& newObj) {obj=&newObj;}
589 static const bool is_const=false;
590};
591
592template <class C, class D, class R, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9, class A10>
593class bound_method<C, R (D::*)(A1,A2,A3,A4,A5,A6,A7,A8,A9,A10) const>
594{
595 typedef R (D::*M)(A1,A2,A3,A4,A5,A6,A7,A8,A9,A10) const;
596 C& obj;
597 M method;
598 public:
599 static const int arity=10;
600 typedef R Ret;
601 template <int i> struct Arg: public functional::Arg<M,i> {};
602 bound_method(C& obj, M method): obj(obj), method(method) {}
603 R operator()(A1 a1,A2 a2,A3 a3,A4 a4,A5 a5,A6 a6,A7 a7,A8 a8,A9 a9,A10 a10) const {return (obj.*method)(a1,a2,a3,a4,a5,a6,a7,a8,a9,a10);}
604 static const bool is_const=true;
605};
606
607#if defined(__cplusplus) && __cplusplus>=201703L
608// noexcept methods
609
610template <class R, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9, class A10>
611struct Arity<R (*)(A1,A2,A3,A4,A5,A6,A7,A8,A9,A10) noexcept>
612{
613 static const int V=10;
614 static const int value=10;
615};
616
617template <class R, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9, class A10>
618struct Return<R (*)(A1,A2,A3,A4,A5,A6,A7,A8,A9,A10) noexcept>
619{
620 typedef R T;
621 typedef R type;
622};
623
624template <class C,class R, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9, class A10>
625struct Arity<R (* C::*)(A1,A2,A3,A4,A5,A6,A7,A8,A9,A10) noexcept>
626{
627 static const int V=10;
628 static const int value=10;
629};
630
631template <class C,class R, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9, class A10>
632struct Return<R (* C::*)(A1,A2,A3,A4,A5,A6,A7,A8,A9,A10) noexcept>
633{
634 typedef R T;
635 typedef R type;
636};
637
638template <class C, class R, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9, class A10>
639struct Arity<R (C::*)(A1,A2,A3,A4,A5,A6,A7,A8,A9,A10) noexcept>
640{
641 static const int V=10;
642 static const int value=10;
643};
644
645template <class C, class R, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9, class A10>
646struct Return<R (C::*)(A1,A2,A3,A4,A5,A6,A7,A8,A9,A10) noexcept>
647{
648 typedef R T;
649 typedef R type;
650};
651
652template <class C, class R, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9, class A10>
653struct Arity<R (C::*)(A1,A2,A3,A4,A5,A6,A7,A8,A9,A10) const noexcept>
654{
655 static const int V=10;
656 static const int value=10;
657};
658
659template <class C, class R, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9, class A10>
660struct Return<R (C::*)(A1,A2,A3,A4,A5,A6,A7,A8,A9,A10) const noexcept>
661{
662 typedef R T;
663 typedef R type;
664};
665
666template <class C, class R, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9, class A10>
667struct ClassOf<R (C::*)(A1,A2,A3,A4,A5,A6,A7,A8,A9,A10) noexcept>
668{
669 typedef C T;
670 typedef C type;
671};
672
673template <class C, class R, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9, class A10>
674struct ClassOf<R (*C::*)(A1,A2,A3,A4,A5,A6,A7,A8,A9,A10) noexcept>
675{
676 typedef C T;
677 typedef C type;
678};
679
680template <class C, class R, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9, class A10>
681struct ClassOf<R (C::*)(A1,A2,A3,A4,A5,A6,A7,A8,A9,A10) const noexcept>
682{
683 typedef C T;
684 typedef C type;
685};
686
687template <class C, class R, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9, class A10>
688struct is_member_function_ptr<R (C::*)(A1,A2,A3,A4,A5,A6,A7,A8,A9,A10) noexcept>
689{
690 static const bool value=true;
691};
692
693template <class C, class R, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9, class A10>
694struct is_member_function_ptr<R (C::*)(A1,A2,A3,A4,A5,A6,A7,A8,A9,A10) const noexcept>
695{
696 static const bool value=true;
697};
698
699template <class C, class R, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9, class A10>
700struct is_const_method<R (C::*)(A1,A2,A3,A4,A5,A6,A7,A8,A9,A10) const noexcept>
701{
702 static const bool value=true;
703};
704
705template <class R, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9, class A10>
706struct is_nonmember_function_ptr<R (*)(A1,A2,A3,A4,A5,A6,A7,A8,A9,A10) noexcept>
707{
708 static const bool value=true;
709};
710
711template <class C, class R, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9, class A10>
712struct is_nonmember_function_ptr<R (*C::*)(A1,A2,A3,A4,A5,A6,A7,A8,A9,A10) noexcept>
713{
714 static const bool value=true;
715};
716
717template <class C, class D, class R, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9, class A10>
718class bound_method<C, R (D::*)(A1,A2,A3,A4,A5,A6,A7,A8,A9,A10) noexcept>
719{
720 typedef R (D::*M)(A1,A2,A3,A4,A5,A6,A7,A8,A9,A10);
721 C* obj;
722 M method;
723 public:
724 static const int arity=10;
725 typedef R Ret;
726 template <int i> struct Arg: public functional::Arg<M,i> {};
727 bound_method(C& obj, M method): obj(&obj), method(method) {}
728 typename enable_if<Not<classdesc::is_const<C> >, R>::T
729 operator()(A1 a1,A2 a2,A3 a3,A4 a4,A5 a5,A6 a6,A7 a7,A8 a8,A9 a9,A10 a10) const {return (obj->*method)(a1,a2,a3,a4,a5,a6,a7,a8,a9,a10);}
730 void rebind(C& newObj) {obj=&newObj;}
731 static const bool is_const=false;
732};
733
734template <class C, class D, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9, class A10>
735class bound_method<C, void (D::*)(A1,A2,A3,A4,A5,A6,A7,A8,A9,A10) noexcept>
736{
737 typedef void (D::*M)(A1,A2,A3,A4,A5,A6,A7,A8,A9,A10);
738 C* obj;
739 M method;
740 public:
741 static const int arity=10;
742 typedef void Ret;
743 template <int i> struct Arg: public functional::Arg<M,i> {};
744 bound_method(C& obj, M method): obj(&obj), method(method) {}
745 typename enable_if<Not<classdesc::is_const<C> > >::T
746 operator()(A1 a1,A2 a2,A3 a3,A4 a4,A5 a5,A6 a6,A7 a7,A8 a8,A9 a9,A10 a10) const {(obj->*method)(a1,a2,a3,a4,a5,a6,a7,a8,a9,a10);}
747 void rebind(C& newObj) {obj=&newObj;}
748 static const bool is_const=false;
749};
750
751template <class C, class D, class R, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9, class A10>
752class bound_method<const C, R (D::*)(A1,A2,A3,A4,A5,A6,A7,A8,A9,A10) noexcept>
753{
754 typedef R (D::*M)(A1,A2,A3,A4,A5,A6,A7,A8,A9,A10);
755 const C* obj;
756 M method;
757 public:
758 static const int arity=10;
759 typedef R Ret;
760 template <int i> struct Arg: public functional::Arg<M,i> {};
761 bound_method(const C& obj, M method): obj(&obj), method(method) {}
762 R operator()(A1 a1,A2 a2,A3 a3,A4 a4,A5 a5,A6 a6,A7 a7,A8 a8,A9 a9,A10 a10) const {
763 throw std::runtime_error("cannot call method, inappropriate argument type");
764 }
765 void rebind(C& newObj) {obj=&newObj;}
766 static const bool is_const=false;
767};
768
769template <class C, class D, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9, class A10>
770class bound_method<const C, void (D::*)(A1,A2,A3,A4,A5,A6,A7,A8,A9,A10) noexcept>
771{
772 typedef void (D::*M)(A1,A2,A3,A4,A5,A6,A7,A8,A9,A10);
773 const C* obj;
774 M method;
775 public:
776 static const int arity=10;
777 typedef void Ret;
778 template <int i> struct Arg: public functional::Arg<M,i> {};
779 bound_method(const C& obj, M method): obj(&obj), method(method) {}
780 typename enable_if<Not<classdesc::is_const<C> > >::T
781 operator()(A1 a1,A2 a2,A3 a3,A4 a4,A5 a5,A6 a6,A7 a7,A8 a8,A9 a9,A10 a10) const {
782 throw std::runtime_error("cannot call method, inappropriate argument type");
783 }
784 void rebind(C& newObj) {obj=&newObj;}
785 static const bool is_const=false;
786};
787
788template <class C, class D, class R, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9, class A10>
789class bound_method<C, R (D::*)(A1,A2,A3,A4,A5,A6,A7,A8,A9,A10) const noexcept>
790{
791 typedef R (D::*M)(A1,A2,A3,A4,A5,A6,A7,A8,A9,A10) const;
792 C& obj;
793 M method;
794 public:
795 static const int arity=10;
796 typedef R Ret;
797 template <int i> struct Arg: public functional::Arg<M,i> {};
798 bound_method(C& obj, M method): obj(obj), method(method) {}
799 R operator()(A1 a1,A2 a2,A3 a3,A4 a4,A5 a5,A6 a6,A7 a7,A8 a8,A9 a9,A10 a10) const {return (obj.*method)(a1,a2,a3,a4,a5,a6,a7,a8,a9,a10);}
800 static const bool is_const=true;
801};
802
803template <class C, class D, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9, class A10>
804class bound_method<C, void (D::*)(A1,A2,A3,A4,A5,A6,A7,A8,A9,A10) const noexcept>
805{
806 typedef void (D::*M)(A1,A2,A3,A4,A5,A6,A7,A8,A9,A10) const;
807 C& obj;
808 M method;
809 public:
810 static const int arity=10;
811 typedef void Ret;
812 template <int i> struct Arg: public functional::Arg<M,i> {};
813 bound_method(C& obj, M method): obj(obj), method(method) {}
814 void operator()(A1 a1,A2 a2,A3 a3,A4 a4,A5 a5,A6 a6,A7 a7,A8 a8,A9 a9,A10 a10) const {(obj.*method)(a1,a2,a3,a4,a5,a6,a7,a8,a9,a10);}
815 static const bool is_const=true;
816};
817#endif
818
819template <class F, class Args>
820typename enable_if<And<AllArgs<F, is_rvalue>, Eq<Arity<F>::value, 10> >,
821 typename Return<F>::T>::T
822apply_nonvoid_fn(F f, Args& a, Fdummy<F> dum=0)
823{
824 return f(a[0],a[1],a[2],a[3],a[4],a[5],a[6],a[7],a[8],a[9]);
825}
826
827/*
828 TODO: if any of the arguments to f are lvalues, we need to construct temporaries,
829 which require C++-11 ability to test for the existence of a copy constructor.
830 If the return type is not copy constructable, the user must arrange for the return value to be discarded
831*/
832
833template <class F, class Args>
834typename enable_if<And<AllArgs<F, is_rvalue>, Eq<Arity<F>::value, 10> >,
835 void>::T
836apply_void_fn(F f, Args& a, Fdummy<F> dum=0)
837{
838 f(a[0],a[1],a[2],a[3],a[4],a[5],a[6],a[7],a[8],a[9]);
839}
840
841template <class Buffer, class F>
842typename enable_if<Eq<Arity<F>::value, 10>, typename Return<F>::T>::T
843callOnBuffer(Buffer& buffer, F f)
844{
845 typename remove_const<typename remove_reference<typename Arg<F,1>::T>::type>::type a1;
846 buffer>>a1;
847 typename remove_const<typename remove_reference<typename Arg<F,2>::T>::type>::type a2;
848 buffer>>a2;
849 typename remove_const<typename remove_reference<typename Arg<F,3>::T>::type>::type a3;
850 buffer>>a3;
851 typename remove_const<typename remove_reference<typename Arg<F,4>::T>::type>::type a4;
852 buffer>>a4;
853 typename remove_const<typename remove_reference<typename Arg<F,5>::T>::type>::type a5;
854 buffer>>a5;
855 typename remove_const<typename remove_reference<typename Arg<F,6>::T>::type>::type a6;
856 buffer>>a6;
857 typename remove_const<typename remove_reference<typename Arg<F,7>::T>::type>::type a7;
858 buffer>>a7;
859 typename remove_const<typename remove_reference<typename Arg<F,8>::T>::type>::type a8;
860 buffer>>a8;
861 typename remove_const<typename remove_reference<typename Arg<F,9>::T>::type>::type a9;
862 buffer>>a9;
863 typename remove_const<typename remove_reference<typename Arg<F,10>::T>::type>::type a10;
864 buffer>>a10;
865 return f(
866a1
867,
868a2
869,
870a3
871,
872a4
873,
874a5
875,
876a6
877,
878a7
879,
880a8
881,
882a9
883,
884a10
885 );
886}
887#endif