3 #include <cgv/type/invalid_type.h>
14 static const bool is_method_pointer =
false;
15 static const bool is_const_method_pointer =
false;
18 static const unsigned int nr_arguments = 0;
21 template <
typename M,
int>
struct method_pointer_argument_list {
typedef invalid_type type; };
25 template <
typename X,
typename R>
28 static const bool is_method_pointer =
true;
29 static const bool is_const_method_pointer =
false;
31 typedef R return_type;
32 static const unsigned int nr_arguments = 0;
37 template <
typename X,
typename R>
40 static const bool is_method_pointer =
true;
41 static const bool is_const_method_pointer =
true;
43 typedef R return_type;
44 static const unsigned int nr_arguments = 0;
50 template <
typename X,
typename R,
typename T1>
53 static const bool is_method_pointer =
true;
54 static const bool is_const_method_pointer =
false;
56 typedef R return_type;
57 static const unsigned int nr_arguments = 1;
60 template <
typename X,
typename R,
typename T1>
61 struct method_pointer_argument_list<R (X::*)(T1),0> {
typedef T1 type; };
65 template <
typename X,
typename R,
typename T1>
68 static const bool is_method_pointer =
true;
69 static const bool is_const_method_pointer =
true;
71 typedef R return_type;
72 static const unsigned int nr_arguments = 1;
75 template <
typename X,
typename R,
typename T1>
76 struct method_pointer_argument_list<R (X::*)(T1) const, 0> {
typedef T1 type; };
81 template <
typename X,
typename R,
typename T1,
typename T2>
84 static const bool is_method_pointer =
true;
85 static const bool is_const_method_pointer =
false;
87 typedef R return_type;
88 static const unsigned int nr_arguments = 2;
91 template <
typename X,
typename R,
typename T1,
typename T2>
92 struct method_pointer_argument_list<R (X::*)(T1,T2),0> {
typedef T1 type; };
94 template <
typename X,
typename R,
typename T1,
typename T2>
95 struct method_pointer_argument_list<R (X::*)(T1,T2),1> {
typedef T2 type; };
99 template <
typename X,
typename R,
typename T1,
typename T2>
102 static const bool is_method_pointer =
true;
103 static const bool is_const_method_pointer =
true;
105 typedef R return_type;
106 static const unsigned int nr_arguments = 2;
109 template <
typename X,
typename R,
typename T1,
typename T2>
110 struct method_pointer_argument_list<R (X::*)(T1,T2) const, 0> {
typedef T1 type; };
112 template <
typename X,
typename R,
typename T1,
typename T2>
113 struct method_pointer_argument_list<R (X::*)(T1,T2) const, 1> {
typedef T2 type; };
118 template <
typename X,
typename R,
typename T1,
typename T2,
typename T3>
121 static const bool is_method_pointer =
true;
122 static const bool is_const_method_pointer =
false;
124 typedef R return_type;
125 static const unsigned int nr_arguments = 3;
128 template <
typename X,
typename R,
typename T1,
typename T2,
typename T3>
129 struct method_pointer_argument_list<R (X::*)(T1,T2,T3),0> {
typedef T1 type; };
131 template <
typename X,
typename R,
typename T1,
typename T2,
typename T3>
132 struct method_pointer_argument_list<R (X::*)(T1,T2,T3),1> {
typedef T2 type; };
134 template <
typename X,
typename R,
typename T1,
typename T2,
typename T3>
135 struct method_pointer_argument_list<R (X::*)(T1,T2,T3),2> {
typedef T3 type; };
139 template <
typename X,
typename R,
typename T1,
typename T2,
typename T3>
142 static const bool is_method_pointer =
true;
143 static const bool is_const_method_pointer =
true;
145 typedef R return_type;
146 static const unsigned int nr_arguments = 3;
149 template <
typename X,
typename R,
typename T1,
typename T2,
typename T3>
150 struct method_pointer_argument_list<R (X::*)(T1,T2,T3) const, 0> {
typedef T1 type; };
152 template <
typename X,
typename R,
typename T1,
typename T2,
typename T3>
153 struct method_pointer_argument_list<R (X::*)(T1,T2,T3) const, 1> {
typedef T2 type; };
155 template <
typename X,
typename R,
typename T1,
typename T2,
typename T3>
156 struct method_pointer_argument_list<R (X::*)(T1,T2,T3) const, 2> {
typedef T3 type; };
161 template <
typename X,
typename R,
typename T1,
typename T2,
typename T3,
typename T4>
164 static const bool is_method_pointer =
true;
165 static const bool is_const_method_pointer =
false;
167 typedef R return_type;
168 static const unsigned int nr_arguments = 4;
171 template <
typename X,
typename R,
typename T1,
typename T2,
typename T3,
typename T4>
172 struct method_pointer_argument_list<R (X::*)(T1,T2,T3,T4),0> {
typedef T1 type; };
174 template <
typename X,
typename R,
typename T1,
typename T2,
typename T3,
typename T4>
175 struct method_pointer_argument_list<R (X::*)(T1,T2,T3,T4),1> {
typedef T2 type; };
177 template <
typename X,
typename R,
typename T1,
typename T2,
typename T3,
typename T4>
178 struct method_pointer_argument_list<R (X::*)(T1,T2,T3,T4),2> {
typedef T3 type; };
180 template <
typename X,
typename R,
typename T1,
typename T2,
typename T3,
typename T4>
181 struct method_pointer_argument_list<R (X::*)(T1,T2,T3,T4),3> {
typedef T4 type; };
185 template <
typename X,
typename R,
typename T1,
typename T2,
typename T3,
typename T4>
188 static const bool is_method_pointer =
true;
189 static const bool is_const_method_pointer =
true;
191 typedef R return_type;
192 static const unsigned int nr_arguments = 4;
195 template <
typename X,
typename R,
typename T1,
typename T2,
typename T3,
typename T4>
196 struct method_pointer_argument_list<R (X::*)(T1,T2,T3,T4) const, 0> {
typedef T1 type; };
198 template <
typename X,
typename R,
typename T1,
typename T2,
typename T3,
typename T4>
199 struct method_pointer_argument_list<R (X::*)(T1,T2,T3,T4) const, 1> {
typedef T2 type; };
201 template <
typename X,
typename R,
typename T1,
typename T2,
typename T3,
typename T4>
202 struct method_pointer_argument_list<R (X::*)(T1,T2,T3,T4) const, 2> {
typedef T3 type; };
204 template <
typename X,
typename R,
typename T1,
typename T2,
typename T3,
typename T4>
205 struct method_pointer_argument_list<R (X::*)(T1,T2,T3,T4) const, 3> {
typedef T4 type; };
210 template <
typename X,
typename R,
typename T1,
typename T2,
typename T3,
typename T4,
typename T5>
213 static const bool is_method_pointer =
true;
214 static const bool is_const_method_pointer =
false;
216 typedef R return_type;
217 static const unsigned int nr_arguments = 5;
220 template <
typename X,
typename R,
typename T1,
typename T2,
typename T3,
typename T4,
typename T5>
221 struct method_pointer_argument_list<R (X::*)(T1,T2,T3,T4,T5),0> {
typedef T1 type; };
223 template <
typename X,
typename R,
typename T1,
typename T2,
typename T3,
typename T4,
typename T5>
224 struct method_pointer_argument_list<R (X::*)(T1,T2,T3,T4,T5),1> {
typedef T2 type; };
226 template <
typename X,
typename R,
typename T1,
typename T2,
typename T3,
typename T4,
typename T5>
227 struct method_pointer_argument_list<R (X::*)(T1,T2,T3,T4,T5),2> {
typedef T3 type; };
229 template <
typename X,
typename R,
typename T1,
typename T2,
typename T3,
typename T4,
typename T5>
230 struct method_pointer_argument_list<R (X::*)(T1,T2,T3,T4,T5),3> {
typedef T4 type; };
232 template <
typename X,
typename R,
typename T1,
typename T2,
typename T3,
typename T4,
typename T5>
233 struct method_pointer_argument_list<R (X::*)(T1,T2,T3,T4,T5),4> {
typedef T5 type; };
237 template <
typename X,
typename R,
typename T1,
typename T2,
typename T3,
typename T4,
typename T5>
240 static const bool is_method_pointer =
true;
241 static const bool is_const_method_pointer =
true;
243 typedef R return_type;
244 static const unsigned int nr_arguments = 5;
247 template <
typename X,
typename R,
typename T1,
typename T2,
typename T3,
typename T4,
typename T5>
248 struct method_pointer_argument_list<R (X::*)(T1,T2,T3,T4,T5) const, 0> {
typedef T1 type; };
250 template <
typename X,
typename R,
typename T1,
typename T2,
typename T3,
typename T4,
typename T5>
251 struct method_pointer_argument_list<R (X::*)(T1,T2,T3,T4,T5) const, 1> {
typedef T2 type; };
253 template <
typename X,
typename R,
typename T1,
typename T2,
typename T3,
typename T4,
typename T5>
254 struct method_pointer_argument_list<R (X::*)(T1,T2,T3,T4,T5) const, 2> {
typedef T3 type; };
256 template <
typename X,
typename R,
typename T1,
typename T2,
typename T3,
typename T4,
typename T5>
257 struct method_pointer_argument_list<R (X::*)(T1,T2,T3,T4,T5) const, 3> {
typedef T4 type; };
259 template <
typename X,
typename R,
typename T1,
typename T2,
typename T3,
typename T4,
typename T5>
260 struct method_pointer_argument_list<R (X::*)(T1,T2,T3,T4,T5) const, 4> {
typedef T5 type; };
265 template <
typename X,
typename R,
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
typename T6>
268 static const bool is_method_pointer =
true;
269 static const bool is_const_method_pointer =
false;
271 typedef R return_type;
272 static const unsigned int nr_arguments = 6;
275 template <
typename X,
typename R,
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
typename T6>
276 struct method_pointer_argument_list<R (X::*)(T1,T2,T3,T4,T5,T6),0> {
typedef T1 type; };
278 template <
typename X,
typename R,
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
typename T6>
279 struct method_pointer_argument_list<R (X::*)(T1,T2,T3,T4,T5,T6),1> {
typedef T2 type; };
281 template <
typename X,
typename R,
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
typename T6>
282 struct method_pointer_argument_list<R (X::*)(T1,T2,T3,T4,T5,T6),2> {
typedef T3 type; };
284 template <
typename X,
typename R,
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
typename T6>
285 struct method_pointer_argument_list<R (X::*)(T1,T2,T3,T4,T5,T6),3> {
typedef T4 type; };
287 template <
typename X,
typename R,
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
typename T6>
288 struct method_pointer_argument_list<R (X::*)(T1,T2,T3,T4,T5,T6),4> {
typedef T5 type; };
290 template <
typename X,
typename R,
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
typename T6>
291 struct method_pointer_argument_list<R (X::*)(T1,T2,T3,T4,T5,T6),5> {
typedef T6 type; };
295 template <
typename X,
typename R,
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
typename T6>
298 static const bool is_method_pointer =
true;
299 static const bool is_const_method_pointer =
true;
301 typedef R return_type;
302 static const unsigned int nr_arguments = 6;
305 template <
typename X,
typename R,
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
typename T6>
306 struct method_pointer_argument_list<R (X::*)(T1,T2,T3,T4,T5,T6) const, 0> {
typedef T1 type; };
308 template <
typename X,
typename R,
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
typename T6>
309 struct method_pointer_argument_list<R (X::*)(T1,T2,T3,T4,T5,T6) const, 1> {
typedef T2 type; };
311 template <
typename X,
typename R,
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
typename T6>
312 struct method_pointer_argument_list<R (X::*)(T1,T2,T3,T4,T5,T6) const, 2> {
typedef T3 type; };
314 template <
typename X,
typename R,
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
typename T6>
315 struct method_pointer_argument_list<R (X::*)(T1,T2,T3,T4,T5,T6) const, 3> {
typedef T4 type; };
317 template <
typename X,
typename R,
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
typename T6>
318 struct method_pointer_argument_list<R (X::*)(T1,T2,T3,T4,T5,T6) const, 4> {
typedef T5 type; };
320 template <
typename X,
typename R,
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
typename T6>
321 struct method_pointer_argument_list<R (X::*)(T1,T2,T3,T4,T5,T6) const, 5> {
typedef T6 type; };
326 template <
typename X,
typename R,
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
typename T6,
typename T7>
329 static const bool is_method_pointer =
true;
330 static const bool is_const_method_pointer =
false;
332 typedef R return_type;
333 static const unsigned int nr_arguments = 7;
336 template <
typename X,
typename R,
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
typename T6,
typename T7>
337 struct method_pointer_argument_list<R (X::*)(T1,T2,T3,T4,T5,T6,T7),0> {
typedef T1 type; };
339 template <
typename X,
typename R,
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
typename T6,
typename T7>
340 struct method_pointer_argument_list<R (X::*)(T1,T2,T3,T4,T5,T6,T7),1> {
typedef T2 type; };
342 template <
typename X,
typename R,
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
typename T6,
typename T7>
343 struct method_pointer_argument_list<R (X::*)(T1,T2,T3,T4,T5,T6,T7),2> {
typedef T3 type; };
345 template <
typename X,
typename R,
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
typename T6,
typename T7>
346 struct method_pointer_argument_list<R (X::*)(T1,T2,T3,T4,T5,T6,T7),3> {
typedef T4 type; };
348 template <
typename X,
typename R,
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
typename T6,
typename T7>
349 struct method_pointer_argument_list<R (X::*)(T1,T2,T3,T4,T5,T6,T7),4> {
typedef T5 type; };
351 template <
typename X,
typename R,
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
typename T6,
typename T7>
352 struct method_pointer_argument_list<R (X::*)(T1,T2,T3,T4,T5,T6,T7),5> {
typedef T6 type; };
354 template <
typename X,
typename R,
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
typename T6,
typename T7>
355 struct method_pointer_argument_list<R (X::*)(T1,T2,T3,T4,T5,T6,T7),6> {
typedef T7 type; };
359 template <
typename X,
typename R,
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
typename T6,
typename T7>
362 static const bool is_method_pointer =
true;
363 static const bool is_const_method_pointer =
true;
365 typedef R return_type;
366 static const unsigned int nr_arguments = 7;
369 template <
typename X,
typename R,
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
typename T6,
typename T7>
370 struct method_pointer_argument_list<R (X::*)(T1,T2,T3,T4,T5,T6,T7) const, 0> {
typedef T1 type; };
372 template <
typename X,
typename R,
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
typename T6,
typename T7>
373 struct method_pointer_argument_list<R (X::*)(T1,T2,T3,T4,T5,T6,T7) const, 1> {
typedef T2 type; };
375 template <
typename X,
typename R,
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
typename T6,
typename T7>
376 struct method_pointer_argument_list<R (X::*)(T1,T2,T3,T4,T5,T6,T7) const, 2> {
typedef T3 type; };
378 template <
typename X,
typename R,
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
typename T6,
typename T7>
379 struct method_pointer_argument_list<R (X::*)(T1,T2,T3,T4,T5,T6,T7) const, 3> {
typedef T4 type; };
381 template <
typename X,
typename R,
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
typename T6,
typename T7>
382 struct method_pointer_argument_list<R (X::*)(T1,T2,T3,T4,T5,T6,T7) const, 4> {
typedef T5 type; };
384 template <
typename X,
typename R,
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
typename T6,
typename T7>
385 struct method_pointer_argument_list<R (X::*)(T1,T2,T3,T4,T5,T6,T7) const, 5> {
typedef T6 type; };
387 template <
typename X,
typename R,
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
typename T6,
typename T7>
388 struct method_pointer_argument_list<R (X::*)(T1,T2,T3,T4,T5,T6,T7) const, 6> {
typedef T7 type; };
393 template <
typename X,
typename R,
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
typename T6,
typename T7,
typename T8>
396 static const bool is_method_pointer =
true;
397 static const bool is_const_method_pointer =
false;
399 typedef R return_type;
400 static const unsigned int nr_arguments = 8;
403 template <
typename X,
typename R,
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
typename T6,
typename T7,
typename T8>
404 struct method_pointer_argument_list<R (X::*)(T1,T2,T3,T4,T5,T6,T7,T8),0> {
typedef T1 type; };
406 template <
typename X,
typename R,
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
typename T6,
typename T7,
typename T8>
407 struct method_pointer_argument_list<R (X::*)(T1,T2,T3,T4,T5,T6,T7,T8),1> {
typedef T2 type; };
409 template <
typename X,
typename R,
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
typename T6,
typename T7,
typename T8>
410 struct method_pointer_argument_list<R (X::*)(T1,T2,T3,T4,T5,T6,T7,T8),2> {
typedef T3 type; };
412 template <
typename X,
typename R,
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
typename T6,
typename T7,
typename T8>
413 struct method_pointer_argument_list<R (X::*)(T1,T2,T3,T4,T5,T6,T7,T8),3> {
typedef T4 type; };
415 template <
typename X,
typename R,
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
typename T6,
typename T7,
typename T8>
416 struct method_pointer_argument_list<R (X::*)(T1,T2,T3,T4,T5,T6,T7,T8),4> {
typedef T5 type; };
418 template <
typename X,
typename R,
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
typename T6,
typename T7,
typename T8>
419 struct method_pointer_argument_list<R (X::*)(T1,T2,T3,T4,T5,T6,T7,T8),5> {
typedef T6 type; };
421 template <
typename X,
typename R,
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
typename T6,
typename T7,
typename T8>
422 struct method_pointer_argument_list<R (X::*)(T1,T2,T3,T4,T5,T6,T7,T8),6> {
typedef T7 type; };
424 template <
typename X,
typename R,
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
typename T6,
typename T7,
typename T8>
425 struct method_pointer_argument_list<R (X::*)(T1,T2,T3,T4,T5,T6,T7,T8),7> {
typedef T8 type; };
429 template <
typename X,
typename R,
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
typename T6,
typename T7,
typename T8>
432 static const bool is_method_pointer =
true;
433 static const bool is_const_method_pointer =
true;
435 typedef R return_type;
436 static const unsigned int nr_arguments = 8;
439 template <
typename X,
typename R,
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
typename T6,
typename T7,
typename T8>
440 struct method_pointer_argument_list<R (X::*)(T1,T2,T3,T4,T5,T6,T7,T8) const, 0> {
typedef T1 type; };
442 template <
typename X,
typename R,
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
typename T6,
typename T7,
typename T8>
443 struct method_pointer_argument_list<R (X::*)(T1,T2,T3,T4,T5,T6,T7,T8) const, 1> {
typedef T2 type; };
445 template <
typename X,
typename R,
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
typename T6,
typename T7,
typename T8>
446 struct method_pointer_argument_list<R (X::*)(T1,T2,T3,T4,T5,T6,T7,T8) const, 2> {
typedef T3 type; };
448 template <
typename X,
typename R,
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
typename T6,
typename T7,
typename T8>
449 struct method_pointer_argument_list<R (X::*)(T1,T2,T3,T4,T5,T6,T7,T8) const, 3> {
typedef T4 type; };
451 template <
typename X,
typename R,
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
typename T6,
typename T7,
typename T8>
452 struct method_pointer_argument_list<R (X::*)(T1,T2,T3,T4,T5,T6,T7,T8) const, 4> {
typedef T5 type; };
454 template <
typename X,
typename R,
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
typename T6,
typename T7,
typename T8>
455 struct method_pointer_argument_list<R (X::*)(T1,T2,T3,T4,T5,T6,T7,T8) const, 5> {
typedef T6 type; };
457 template <
typename X,
typename R,
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
typename T6,
typename T7,
typename T8>
458 struct method_pointer_argument_list<R (X::*)(T1,T2,T3,T4,T5,T6,T7,T8) const, 6> {
typedef T7 type; };
460 template <
typename X,
typename R,
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
typename T6,
typename T7,
typename T8>
461 struct method_pointer_argument_list<R (X::*)(T1,T2,T3,T4,T5,T6,T7,T8) const, 7> {
typedef T8 type; };