Classdesc 3.44
functiondb11.h
1#ifndef CLASSDESC_FUNCTIONDB11
2#define CLASSDESC_FUNCTIONDB11
3template <class R, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9, class A10, class A11>
4struct Arg<R (*)(A1,A2,A3,A4,A5,A6,A7,A8,A9,A10,A11), 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, class A11>
11struct Arg<R (C::*)(A1,A2,A3,A4,A5,A6,A7,A8,A9,A10,A11), 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, class A11>
18struct Arg<R (C::*)(A1,A2,A3,A4,A5,A6,A7,A8,A9,A10,A11) 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, class A11>
27struct Arg<R (*)(A1,A2,A3,A4,A5,A6,A7,A8,A9,A10,A11) 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, class A11>
34struct Arg<R (C::*)(A1,A2,A3,A4,A5,A6,A7,A8,A9,A10,A11) 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, class A11>
41struct Arg<R (C::*)(A1,A2,A3,A4,A5,A6,A7,A8,A9,A10,A11) 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, class A11>
48struct Arg<R (*)(A1,A2,A3,A4,A5,A6,A7,A8,A9,A10,A11), 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, class A11>
55struct Arg<R (C::*)(A1,A2,A3,A4,A5,A6,A7,A8,A9,A10,A11), 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, class A11>
62struct Arg<R (C::*)(A1,A2,A3,A4,A5,A6,A7,A8,A9,A10,A11) 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, class A11>
71struct Arg<R (*)(A1,A2,A3,A4,A5,A6,A7,A8,A9,A10,A11) 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, class A11>
78struct Arg<R (C::*)(A1,A2,A3,A4,A5,A6,A7,A8,A9,A10,A11) 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, class A11>
85struct Arg<R (C::*)(A1,A2,A3,A4,A5,A6,A7,A8,A9,A10,A11) 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, class A11>
92struct Arg<R (*)(A1,A2,A3,A4,A5,A6,A7,A8,A9,A10,A11), 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, class A11>
99struct Arg<R (C::*)(A1,A2,A3,A4,A5,A6,A7,A8,A9,A10,A11), 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, class A11>
106struct Arg<R (C::*)(A1,A2,A3,A4,A5,A6,A7,A8,A9,A10,A11) 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, class A11>
115struct Arg<R (*)(A1,A2,A3,A4,A5,A6,A7,A8,A9,A10,A11) 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, class A11>
122struct Arg<R (C::*)(A1,A2,A3,A4,A5,A6,A7,A8,A9,A10,A11) 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, class A11>
129struct Arg<R (C::*)(A1,A2,A3,A4,A5,A6,A7,A8,A9,A10,A11) 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, class A11>
136struct Arg<R (*)(A1,A2,A3,A4,A5,A6,A7,A8,A9,A10,A11), 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, class A11>
143struct Arg<R (C::*)(A1,A2,A3,A4,A5,A6,A7,A8,A9,A10,A11), 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, class A11>
150struct Arg<R (C::*)(A1,A2,A3,A4,A5,A6,A7,A8,A9,A10,A11) 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, class A11>
159struct Arg<R (*)(A1,A2,A3,A4,A5,A6,A7,A8,A9,A10,A11) 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, class A11>
166struct Arg<R (C::*)(A1,A2,A3,A4,A5,A6,A7,A8,A9,A10,A11) 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, class A11>
173struct Arg<R (C::*)(A1,A2,A3,A4,A5,A6,A7,A8,A9,A10,A11) 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, class A11>
180struct Arg<R (*)(A1,A2,A3,A4,A5,A6,A7,A8,A9,A10,A11), 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, class A11>
187struct Arg<R (C::*)(A1,A2,A3,A4,A5,A6,A7,A8,A9,A10,A11), 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, class A11>
194struct Arg<R (C::*)(A1,A2,A3,A4,A5,A6,A7,A8,A9,A10,A11) 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, class A11>
203struct Arg<R (*)(A1,A2,A3,A4,A5,A6,A7,A8,A9,A10,A11) 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, class A11>
210struct Arg<R (C::*)(A1,A2,A3,A4,A5,A6,A7,A8,A9,A10,A11) 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, class A11>
217struct Arg<R (C::*)(A1,A2,A3,A4,A5,A6,A7,A8,A9,A10,A11) 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, class A11>
224struct Arg<R (*)(A1,A2,A3,A4,A5,A6,A7,A8,A9,A10,A11), 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, class A11>
231struct Arg<R (C::*)(A1,A2,A3,A4,A5,A6,A7,A8,A9,A10,A11), 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, class A11>
238struct Arg<R (C::*)(A1,A2,A3,A4,A5,A6,A7,A8,A9,A10,A11) 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, class A11>
247struct Arg<R (*)(A1,A2,A3,A4,A5,A6,A7,A8,A9,A10,A11) 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, class A11>
254struct Arg<R (C::*)(A1,A2,A3,A4,A5,A6,A7,A8,A9,A10,A11) 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, class A11>
261struct Arg<R (C::*)(A1,A2,A3,A4,A5,A6,A7,A8,A9,A10,A11) 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, class A11>
268struct Arg<R (*)(A1,A2,A3,A4,A5,A6,A7,A8,A9,A10,A11), 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, class A11>
275struct Arg<R (C::*)(A1,A2,A3,A4,A5,A6,A7,A8,A9,A10,A11), 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, class A11>
282struct Arg<R (C::*)(A1,A2,A3,A4,A5,A6,A7,A8,A9,A10,A11) 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, class A11>
291struct Arg<R (*)(A1,A2,A3,A4,A5,A6,A7,A8,A9,A10,A11) 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, class A11>
298struct Arg<R (C::*)(A1,A2,A3,A4,A5,A6,A7,A8,A9,A10,A11) 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, class A11>
305struct Arg<R (C::*)(A1,A2,A3,A4,A5,A6,A7,A8,A9,A10,A11) 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, class A11>
312struct Arg<R (*)(A1,A2,A3,A4,A5,A6,A7,A8,A9,A10,A11), 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, class A11>
319struct Arg<R (C::*)(A1,A2,A3,A4,A5,A6,A7,A8,A9,A10,A11), 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, class A11>
326struct Arg<R (C::*)(A1,A2,A3,A4,A5,A6,A7,A8,A9,A10,A11) 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, class A11>
335struct Arg<R (*)(A1,A2,A3,A4,A5,A6,A7,A8,A9,A10,A11) 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, class A11>
342struct Arg<R (C::*)(A1,A2,A3,A4,A5,A6,A7,A8,A9,A10,A11) 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, class A11>
349struct Arg<R (C::*)(A1,A2,A3,A4,A5,A6,A7,A8,A9,A10,A11) 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, class A11>
356struct Arg<R (*)(A1,A2,A3,A4,A5,A6,A7,A8,A9,A10,A11), 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, class A11>
363struct Arg<R (C::*)(A1,A2,A3,A4,A5,A6,A7,A8,A9,A10,A11), 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, class A11>
370struct Arg<R (C::*)(A1,A2,A3,A4,A5,A6,A7,A8,A9,A10,A11) 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, class A11>
379struct Arg<R (*)(A1,A2,A3,A4,A5,A6,A7,A8,A9,A10,A11) 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, class A11>
386struct Arg<R (C::*)(A1,A2,A3,A4,A5,A6,A7,A8,A9,A10,A11) 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, class A11>
393struct Arg<R (C::*)(A1,A2,A3,A4,A5,A6,A7,A8,A9,A10,A11) 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, class A11>
400struct Arg<R (*)(A1,A2,A3,A4,A5,A6,A7,A8,A9,A10,A11), 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, class A11>
407struct Arg<R (C::*)(A1,A2,A3,A4,A5,A6,A7,A8,A9,A10,A11), 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, class A11>
414struct Arg<R (C::*)(A1,A2,A3,A4,A5,A6,A7,A8,A9,A10,A11) 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, class A11>
423struct Arg<R (*)(A1,A2,A3,A4,A5,A6,A7,A8,A9,A10,A11) 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, class A11>
430struct Arg<R (C::*)(A1,A2,A3,A4,A5,A6,A7,A8,A9,A10,A11) 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, class A11>
437struct Arg<R (C::*)(A1,A2,A3,A4,A5,A6,A7,A8,A9,A10,A11) const noexcept, 10>
438{
439 typedef A10 T;
440 typedef T type;
441};
442#endif
443template <class R, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9, class A10, class A11>
444struct Arg<R (*)(A1,A2,A3,A4,A5,A6,A7,A8,A9,A10,A11), 11>
445{
446 typedef A11 T;
447 typedef T type;
448};
449
450template <class C, class R, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9, class A10, class A11>
451struct Arg<R (C::*)(A1,A2,A3,A4,A5,A6,A7,A8,A9,A10,A11), 11>
452{
453 typedef A11 T;
454 typedef T type;
455};
456
457template <class C, class R, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9, class A10, class A11>
458struct Arg<R (C::*)(A1,A2,A3,A4,A5,A6,A7,A8,A9,A10,A11) const, 11>
459{
460 typedef A11 T;
461 typedef T type;
462};
463
464#if defined(__cplusplus) && __cplusplus>=201703L
465// noexcept methods
466template <class R, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9, class A10, class A11>
467struct Arg<R (*)(A1,A2,A3,A4,A5,A6,A7,A8,A9,A10,A11) noexcept, 11>
468{
469 typedef A11 T;
470 typedef T type;
471};
472
473template <class C, class R, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9, class A10, class A11>
474struct Arg<R (C::*)(A1,A2,A3,A4,A5,A6,A7,A8,A9,A10,A11) noexcept, 11>
475{
476 typedef A11 T;
477 typedef T type;
478};
479
480template <class C, class R, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9, class A10, class A11>
481struct Arg<R (C::*)(A1,A2,A3,A4,A5,A6,A7,A8,A9,A10,A11) const noexcept, 11>
482{
483 typedef A11 T;
484 typedef T type;
485};
486#endif
487template <class F, template<class> class P>
488struct AllArgs<F,P,11>
489{
490 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 && P<typename Arg<F,11>::T>::value;
491};
492
493
494template <class R, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9, class A10, class A11>
495struct Arity<R (*)(A1,A2,A3,A4,A5,A6,A7,A8,A9,A10,A11)>
496{
497 static const int V=11;
498 static const int value=11;
499};
500
501template <class R, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9, class A10, class A11>
502struct Return<R (*)(A1,A2,A3,A4,A5,A6,A7,A8,A9,A10,A11)>
503{
504 typedef R T;
505 typedef R type;
506};
507
508template <class C,class R, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9, class A10, class A11>
509struct Arity<R (* C::*)(A1,A2,A3,A4,A5,A6,A7,A8,A9,A10,A11)>
510{
511 static const int V=11;
512 static const int value=11;
513};
514
515template <class C,class R, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9, class A10, class A11>
516struct Return<R (* C::*)(A1,A2,A3,A4,A5,A6,A7,A8,A9,A10,A11)>
517{
518 typedef R T;
519 typedef R type;
520};
521
522template <class C, class R, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9, class A10, class A11>
523struct Arity<R (C::*)(A1,A2,A3,A4,A5,A6,A7,A8,A9,A10,A11)>
524{
525 static const int V=11;
526 static const int value=11;
527};
528
529template <class C, class R, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9, class A10, class A11>
530struct Return<R (C::*)(A1,A2,A3,A4,A5,A6,A7,A8,A9,A10,A11)>
531{
532 typedef R T;
533 typedef R type;
534};
535
536template <class C, class R, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9, class A10, class A11>
537struct Arity<R (C::*)(A1,A2,A3,A4,A5,A6,A7,A8,A9,A10,A11) const>
538{
539 static const int V=11;
540 static const int value=11;
541};
542
543template <class C, class R, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9, class A10, class A11>
544struct Return<R (C::*)(A1,A2,A3,A4,A5,A6,A7,A8,A9,A10,A11) const>
545{
546 typedef R T;
547 typedef R type;
548};
549
550template <class C, class R, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9, class A10, class A11>
551struct ClassOf<R (C::*)(A1,A2,A3,A4,A5,A6,A7,A8,A9,A10,A11)>
552{
553 typedef C T;
554 typedef C type;
555};
556
557template <class C, class R, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9, class A10, class A11>
558struct ClassOf<R (*C::*)(A1,A2,A3,A4,A5,A6,A7,A8,A9,A10,A11)>
559{
560 typedef C T;
561 typedef C type;
562};
563
564template <class C, class R, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9, class A10, class A11>
565struct ClassOf<R (C::*)(A1,A2,A3,A4,A5,A6,A7,A8,A9,A10,A11) const>
566{
567 typedef C T;
568 typedef C type;
569};
570
571template <class C, class R, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9, class A10, class A11>
572struct is_member_function_ptr<R (C::*)(A1,A2,A3,A4,A5,A6,A7,A8,A9,A10,A11)>
573{
574 static const bool value=true;
575};
576
577template <class C, class R, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9, class A10, class A11>
578struct is_member_function_ptr<R (C::*)(A1,A2,A3,A4,A5,A6,A7,A8,A9,A10,A11) const>
579{
580 static const bool value=true;
581};
582
583template <class C, class R, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9, class A10, class A11>
584struct is_const_method<R (C::*)(A1,A2,A3,A4,A5,A6,A7,A8,A9,A10,A11) const>
585{
586 static const bool value=true;
587};
588
589template <class R, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9, class A10, class A11>
590struct is_nonmember_function_ptr<R (*)(A1,A2,A3,A4,A5,A6,A7,A8,A9,A10,A11)>
591{
592 static const bool value=true;
593};
594
595template <class C, class R, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9, class A10, class A11>
596struct is_nonmember_function_ptr<R (*C::*)(A1,A2,A3,A4,A5,A6,A7,A8,A9,A10,A11)>
597{
598 static const bool value=true;
599};
600
601template <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, class A11>
602class bound_method<C, R (D::*)(A1,A2,A3,A4,A5,A6,A7,A8,A9,A10,A11)>
603{
604 typedef R (D::*M)(A1,A2,A3,A4,A5,A6,A7,A8,A9,A10,A11);
605 C* obj;
606 M method;
607 public:
608 static const int arity=11;
609 typedef R Ret;
610 template <int i> struct Arg: public functional::Arg<M,i> {};
611 bound_method(C& obj, M method): obj(&obj), method(method) {}
612 typename enable_if<Not<classdesc::is_const<C> >, R>::T
613 operator()(A1 a1,A2 a2,A3 a3,A4 a4,A5 a5,A6 a6,A7 a7,A8 a8,A9 a9,A10 a10,A11 a11) const {return (obj->*method)(a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11);}
614 void rebind(C& newObj) {obj=&newObj;}
615 static const bool is_const=false;
616};
617
618template <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, class A11>
619class bound_method<const C, R (D::*)(A1,A2,A3,A4,A5,A6,A7,A8,A9,A10,A11)>
620{
621 typedef R (D::*M)(A1,A2,A3,A4,A5,A6,A7,A8,A9,A10,A11);
622 const C* obj;
623 M method;
624 public:
625 static const int arity=11;
626 typedef R Ret;
627 template <int i> struct Arg: public functional::Arg<M,i> {};
628 bound_method(const C& obj, M method): obj(&obj), method(method) {}
629 R operator()(A1 a1,A2 a2,A3 a3,A4 a4,A5 a5,A6 a6,A7 a7,A8 a8,A9 a9,A10 a10,A11 a11) const {
630 throw std::runtime_error("cannot call method, inappropriate argument type");
631 }
632 void rebind(C& newObj) {obj=&newObj;}
633 static const bool is_const=false;
634};
635
636template <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, class A11>
637class bound_method<C, R (D::*)(A1,A2,A3,A4,A5,A6,A7,A8,A9,A10,A11) const>
638{
639 typedef R (D::*M)(A1,A2,A3,A4,A5,A6,A7,A8,A9,A10,A11) const;
640 C& obj;
641 M method;
642 public:
643 static const int arity=11;
644 typedef R Ret;
645 template <int i> struct Arg: public functional::Arg<M,i> {};
646 bound_method(C& obj, M method): obj(obj), method(method) {}
647 R operator()(A1 a1,A2 a2,A3 a3,A4 a4,A5 a5,A6 a6,A7 a7,A8 a8,A9 a9,A10 a10,A11 a11) const {return (obj.*method)(a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11);}
648 static const bool is_const=true;
649};
650
651#if defined(__cplusplus) && __cplusplus>=201703L
652// noexcept methods
653
654template <class R, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9, class A10, class A11>
655struct Arity<R (*)(A1,A2,A3,A4,A5,A6,A7,A8,A9,A10,A11) noexcept>
656{
657 static const int V=11;
658 static const int value=11;
659};
660
661template <class R, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9, class A10, class A11>
662struct Return<R (*)(A1,A2,A3,A4,A5,A6,A7,A8,A9,A10,A11) noexcept>
663{
664 typedef R T;
665 typedef R type;
666};
667
668template <class C,class R, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9, class A10, class A11>
669struct Arity<R (* C::*)(A1,A2,A3,A4,A5,A6,A7,A8,A9,A10,A11) noexcept>
670{
671 static const int V=11;
672 static const int value=11;
673};
674
675template <class C,class R, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9, class A10, class A11>
676struct Return<R (* C::*)(A1,A2,A3,A4,A5,A6,A7,A8,A9,A10,A11) noexcept>
677{
678 typedef R T;
679 typedef R type;
680};
681
682template <class C, class R, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9, class A10, class A11>
683struct Arity<R (C::*)(A1,A2,A3,A4,A5,A6,A7,A8,A9,A10,A11) noexcept>
684{
685 static const int V=11;
686 static const int value=11;
687};
688
689template <class C, class R, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9, class A10, class A11>
690struct Return<R (C::*)(A1,A2,A3,A4,A5,A6,A7,A8,A9,A10,A11) noexcept>
691{
692 typedef R T;
693 typedef R type;
694};
695
696template <class C, class R, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9, class A10, class A11>
697struct Arity<R (C::*)(A1,A2,A3,A4,A5,A6,A7,A8,A9,A10,A11) const noexcept>
698{
699 static const int V=11;
700 static const int value=11;
701};
702
703template <class C, class R, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9, class A10, class A11>
704struct Return<R (C::*)(A1,A2,A3,A4,A5,A6,A7,A8,A9,A10,A11) const noexcept>
705{
706 typedef R T;
707 typedef R type;
708};
709
710template <class C, class R, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9, class A10, class A11>
711struct ClassOf<R (C::*)(A1,A2,A3,A4,A5,A6,A7,A8,A9,A10,A11) noexcept>
712{
713 typedef C T;
714 typedef C type;
715};
716
717template <class C, class R, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9, class A10, class A11>
718struct ClassOf<R (*C::*)(A1,A2,A3,A4,A5,A6,A7,A8,A9,A10,A11) noexcept>
719{
720 typedef C T;
721 typedef C type;
722};
723
724template <class C, class R, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9, class A10, class A11>
725struct ClassOf<R (C::*)(A1,A2,A3,A4,A5,A6,A7,A8,A9,A10,A11) const noexcept>
726{
727 typedef C T;
728 typedef C type;
729};
730
731template <class C, class R, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9, class A10, class A11>
732struct is_member_function_ptr<R (C::*)(A1,A2,A3,A4,A5,A6,A7,A8,A9,A10,A11) noexcept>
733{
734 static const bool value=true;
735};
736
737template <class C, class R, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9, class A10, class A11>
738struct is_member_function_ptr<R (C::*)(A1,A2,A3,A4,A5,A6,A7,A8,A9,A10,A11) const noexcept>
739{
740 static const bool value=true;
741};
742
743template <class C, class R, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9, class A10, class A11>
744struct is_const_method<R (C::*)(A1,A2,A3,A4,A5,A6,A7,A8,A9,A10,A11) const noexcept>
745{
746 static const bool value=true;
747};
748
749template <class R, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9, class A10, class A11>
750struct is_nonmember_function_ptr<R (*)(A1,A2,A3,A4,A5,A6,A7,A8,A9,A10,A11) noexcept>
751{
752 static const bool value=true;
753};
754
755template <class C, class R, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9, class A10, class A11>
756struct is_nonmember_function_ptr<R (*C::*)(A1,A2,A3,A4,A5,A6,A7,A8,A9,A10,A11) noexcept>
757{
758 static const bool value=true;
759};
760
761template <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, class A11>
762class bound_method<C, R (D::*)(A1,A2,A3,A4,A5,A6,A7,A8,A9,A10,A11) noexcept>
763{
764 typedef R (D::*M)(A1,A2,A3,A4,A5,A6,A7,A8,A9,A10,A11);
765 C* obj;
766 M method;
767 public:
768 static const int arity=11;
769 typedef R Ret;
770 template <int i> struct Arg: public functional::Arg<M,i> {};
771 bound_method(C& obj, M method): obj(&obj), method(method) {}
772 typename enable_if<Not<classdesc::is_const<C> >, R>::T
773 operator()(A1 a1,A2 a2,A3 a3,A4 a4,A5 a5,A6 a6,A7 a7,A8 a8,A9 a9,A10 a10,A11 a11) const {return (obj->*method)(a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11);}
774 void rebind(C& newObj) {obj=&newObj;}
775 static const bool is_const=false;
776};
777
778template <class C, class D, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9, class A10, class A11>
779class bound_method<C, void (D::*)(A1,A2,A3,A4,A5,A6,A7,A8,A9,A10,A11) noexcept>
780{
781 typedef void (D::*M)(A1,A2,A3,A4,A5,A6,A7,A8,A9,A10,A11);
782 C* obj;
783 M method;
784 public:
785 static const int arity=11;
786 typedef void Ret;
787 template <int i> struct Arg: public functional::Arg<M,i> {};
788 bound_method(C& obj, M method): obj(&obj), method(method) {}
789 typename enable_if<Not<classdesc::is_const<C> > >::T
790 operator()(A1 a1,A2 a2,A3 a3,A4 a4,A5 a5,A6 a6,A7 a7,A8 a8,A9 a9,A10 a10,A11 a11) const {(obj->*method)(a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11);}
791 void rebind(C& newObj) {obj=&newObj;}
792 static const bool is_const=false;
793};
794
795template <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, class A11>
796class bound_method<const C, R (D::*)(A1,A2,A3,A4,A5,A6,A7,A8,A9,A10,A11) noexcept>
797{
798 typedef R (D::*M)(A1,A2,A3,A4,A5,A6,A7,A8,A9,A10,A11);
799 const C* obj;
800 M method;
801 public:
802 static const int arity=11;
803 typedef R Ret;
804 template <int i> struct Arg: public functional::Arg<M,i> {};
805 bound_method(const C& obj, M method): obj(&obj), method(method) {}
806 R operator()(A1 a1,A2 a2,A3 a3,A4 a4,A5 a5,A6 a6,A7 a7,A8 a8,A9 a9,A10 a10,A11 a11) const {
807 throw std::runtime_error("cannot call method, inappropriate argument type");
808 }
809 void rebind(C& newObj) {obj=&newObj;}
810 static const bool is_const=false;
811};
812
813template <class C, class D, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9, class A10, class A11>
814class bound_method<const C, void (D::*)(A1,A2,A3,A4,A5,A6,A7,A8,A9,A10,A11) noexcept>
815{
816 typedef void (D::*M)(A1,A2,A3,A4,A5,A6,A7,A8,A9,A10,A11);
817 const C* obj;
818 M method;
819 public:
820 static const int arity=11;
821 typedef void Ret;
822 template <int i> struct Arg: public functional::Arg<M,i> {};
823 bound_method(const C& obj, M method): obj(&obj), method(method) {}
824 typename enable_if<Not<classdesc::is_const<C> > >::T
825 operator()(A1 a1,A2 a2,A3 a3,A4 a4,A5 a5,A6 a6,A7 a7,A8 a8,A9 a9,A10 a10,A11 a11) const {
826 throw std::runtime_error("cannot call method, inappropriate argument type");
827 }
828 void rebind(C& newObj) {obj=&newObj;}
829 static const bool is_const=false;
830};
831
832template <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, class A11>
833class bound_method<C, R (D::*)(A1,A2,A3,A4,A5,A6,A7,A8,A9,A10,A11) const noexcept>
834{
835 typedef R (D::*M)(A1,A2,A3,A4,A5,A6,A7,A8,A9,A10,A11) const;
836 C& obj;
837 M method;
838 public:
839 static const int arity=11;
840 typedef R Ret;
841 template <int i> struct Arg: public functional::Arg<M,i> {};
842 bound_method(C& obj, M method): obj(obj), method(method) {}
843 R operator()(A1 a1,A2 a2,A3 a3,A4 a4,A5 a5,A6 a6,A7 a7,A8 a8,A9 a9,A10 a10,A11 a11) const {return (obj.*method)(a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11);}
844 static const bool is_const=true;
845};
846
847template <class C, class D, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9, class A10, class A11>
848class bound_method<C, void (D::*)(A1,A2,A3,A4,A5,A6,A7,A8,A9,A10,A11) const noexcept>
849{
850 typedef void (D::*M)(A1,A2,A3,A4,A5,A6,A7,A8,A9,A10,A11) const;
851 C& obj;
852 M method;
853 public:
854 static const int arity=11;
855 typedef void Ret;
856 template <int i> struct Arg: public functional::Arg<M,i> {};
857 bound_method(C& obj, M method): obj(obj), method(method) {}
858 void operator()(A1 a1,A2 a2,A3 a3,A4 a4,A5 a5,A6 a6,A7 a7,A8 a8,A9 a9,A10 a10,A11 a11) const {(obj.*method)(a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11);}
859 static const bool is_const=true;
860};
861#endif
862
863template <class F, class Args>
864typename enable_if<And<AllArgs<F, is_rvalue>, Eq<Arity<F>::value, 11> >,
865 typename Return<F>::T>::T
866apply_nonvoid_fn(F f, Args& a, Fdummy<F> dum=0)
867{
868 return f(a[0],a[1],a[2],a[3],a[4],a[5],a[6],a[7],a[8],a[9],a[10]);
869}
870
871/*
872 TODO: if any of the arguments to f are lvalues, we need to construct temporaries,
873 which require C++-11 ability to test for the existence of a copy constructor.
874 If the return type is not copy constructable, the user must arrange for the return value to be discarded
875*/
876
877template <class F, class Args>
878typename enable_if<And<AllArgs<F, is_rvalue>, Eq<Arity<F>::value, 11> >,
879 void>::T
880apply_void_fn(F f, Args& a, Fdummy<F> dum=0)
881{
882 f(a[0],a[1],a[2],a[3],a[4],a[5],a[6],a[7],a[8],a[9],a[10]);
883}
884
885template <class Buffer, class F>
886typename enable_if<Eq<Arity<F>::value, 11>, typename Return<F>::T>::T
887callOnBuffer(Buffer& buffer, F f)
888{
889 typename remove_const<typename remove_reference<typename Arg<F,1>::T>::type>::type a1;
890 buffer>>a1;
891 typename remove_const<typename remove_reference<typename Arg<F,2>::T>::type>::type a2;
892 buffer>>a2;
893 typename remove_const<typename remove_reference<typename Arg<F,3>::T>::type>::type a3;
894 buffer>>a3;
895 typename remove_const<typename remove_reference<typename Arg<F,4>::T>::type>::type a4;
896 buffer>>a4;
897 typename remove_const<typename remove_reference<typename Arg<F,5>::T>::type>::type a5;
898 buffer>>a5;
899 typename remove_const<typename remove_reference<typename Arg<F,6>::T>::type>::type a6;
900 buffer>>a6;
901 typename remove_const<typename remove_reference<typename Arg<F,7>::T>::type>::type a7;
902 buffer>>a7;
903 typename remove_const<typename remove_reference<typename Arg<F,8>::T>::type>::type a8;
904 buffer>>a8;
905 typename remove_const<typename remove_reference<typename Arg<F,9>::T>::type>::type a9;
906 buffer>>a9;
907 typename remove_const<typename remove_reference<typename Arg<F,10>::T>::type>::type a10;
908 buffer>>a10;
909 typename remove_const<typename remove_reference<typename Arg<F,11>::T>::type>::type a11;
910 buffer>>a11;
911 return f(
912a1
913,
914a2
915,
916a3
917,
918a4
919,
920a5
921,
922a6
923,
924a7
925,
926a8
927,
928a9
929,
930a10
931,
932a11
933 );
934}
935#endif