sqrat  0.9
sqrat
 All Classes Functions Variables Enumerations Enumerator Pages
sqratOverloadMethods.h
1 //
2 // SqratOverloadMethods: Overload Methods
3 //
4 
5 //
6 // Copyright (c) 2009 Brandon Jones
7 //
8 // This software is provided 'as-is', without any express or implied
9 // warranty. In no event will the authors be held liable for any damages
10 // arising from the use of this software.
11 //
12 // Permission is granted to anyone to use this software for any purpose,
13 // including commercial applications, and to alter it and redistribute it
14 // freely, subject to the following restrictions:
15 //
16 // 1. The origin of this software must not be misrepresented; you must not
17 // claim that you wrote the original software. If you use this software
18 // in a product, an acknowledgment in the product documentation would be
19 // appreciated but is not required.
20 //
21 // 2. Altered source versions must be plainly marked as such, and must not be
22 // misrepresented as being the original software.
23 //
24 // 3. This notice may not be removed or altered from any source
25 // distribution.
26 //
27 
28 #if !defined(_SQRAT_OVERLOAD_METHODS_H_)
29 #define _SQRAT_OVERLOAD_METHODS_H_
30 
31 #include <squirrel.h>
32 #include <sqstdaux.h>
33 #include <sstream>
34 #include "sqratTypes.h"
35 #include "sqratUtil.h"
36 #include "sqratGlobalMethods.h"
37 #include "sqratMemberMethods.h"
38 
39 namespace Sqrat {
40 
42 
43 
44 //
45 // Overload name generator
46 //
47 
48 class SqOverloadName {
49 public:
50 
51  static string Get(const SQChar* name, int args) {
52  std::basic_stringstream<SQChar> overloadName;
53  overloadName << _SC("__sqrat_ol_ ") << name << _SC("_") << args;
54 
55  return overloadName.str();
56  }
57 };
58 
59 
60 //
61 // Squirrel Overload Functions
62 //
63 
64 template <class R>
65 class SqOverload {
66 public:
67 
68  static SQInteger Func(HSQUIRRELVM vm) {
69  // Get the arg count
70  int argCount = sq_gettop(vm) - 2;
71 
72  const SQChar* funcName;
73  sq_getstring(vm, -1, &funcName); // get the function name (free variable)
74 
75  string overloadName = SqOverloadName::Get(funcName, argCount);
76 
77  sq_pushstring(vm, overloadName.c_str(), -1);
78 
79 #if !defined (SCRAT_NO_ERROR_CHECKING)
80  if(SQ_FAILED(sq_get(vm, 1))) { // Lookup the proper overload
81  return sq_throwerror(vm, _SC("wrong number of parameters"));
82  }
83 #else
84  sq_get(vm, 1);
85 #endif
86 
87  // Push the args again
88  for(int i = 1; i <= argCount + 1; ++i) {
89  sq_push(vm, i);
90  }
91 
92  sq_call(vm, argCount + 1, true, ErrorHandling::IsEnabled());
93 
94 #if !defined (SCRAT_NO_ERROR_CHECKING)
95  if (Error::Instance().Occurred(vm)) {
96  return sq_throwerror(vm, Error::Instance().Message(vm).c_str());
97  }
98 #endif
99 
100  return 1;
101  }
102 };
103 
104 
105 //
106 // void return specialization
107 //
108 
109 template <>
110 class SqOverload<void> {
111 public:
112 
113  static SQInteger Func(HSQUIRRELVM vm) {
114  // Get the arg count
115  int argCount = sq_gettop(vm) - 2;
116 
117  const SQChar* funcName;
118  sq_getstring(vm, -1, &funcName); // get the function name (free variable)
119 
120  string overloadName = SqOverloadName::Get(funcName, argCount);
121 
122  sq_pushstring(vm, overloadName.c_str(), -1);
123 
124 #if !defined (SCRAT_NO_ERROR_CHECKING)
125  if(SQ_FAILED(sq_get(vm, 1))) { // Lookup the proper overload
126  return sq_throwerror(vm, _SC("wrong number of parameters"));
127  }
128 #else
129  sq_get(vm, 1);
130 #endif
131 
132  // Push the args again
133  for(int i = 1; i <= argCount + 1; ++i) {
134  sq_push(vm, i);
135  }
136 
137  sq_call(vm, argCount + 1, false, ErrorHandling::IsEnabled());
138 
139 #if !defined (SCRAT_NO_ERROR_CHECKING)
140  if (Error::Instance().Occurred(vm)) {
141  return sq_throwerror(vm, Error::Instance().Message(vm).c_str());
142  }
143 #endif
144 
145  return 0;
146  }
147 };
148 
149 
150 //
151 // Global Overloaded Function Resolvers
152 //
153 
154 // Arg Count 0
155 template <class R>
156 SQFUNCTION SqGlobalOverloadedFunc(R (*/*method*/)()) {
157  return &SqGlobal<R>::template Func0<true>;
158 }
159 
160 template <class R>
161 SQFUNCTION SqGlobalOverloadedFunc(R & (*/*method*/)()) {
162  return &SqGlobal<R&>::template Func0<true>;
163 }
164 
165 // Arg Count 1
166 template <class R, class A1>
167 SQFUNCTION SqGlobalOverloadedFunc(R (*/*method*/)(A1)) {
168  return &SqGlobal<R>::template Func1<A1, 2, true>;
169 }
170 
171 template <class R, class A1>
172 SQFUNCTION SqGlobalOverloadedFunc(R & (*/*method*/)(A1)) {
173  return &SqGlobal<R&>::template Func1<A1, 2, true>;
174 }
175 
176 // Arg Count 2
177 template <class R, class A1, class A2>
178 SQFUNCTION SqGlobalOverloadedFunc(R (*/*method*/)(A1, A2)) {
179  return &SqGlobal<R>::template Func2<A1, A2, 2, true>;
180 }
181 
182 template <class R, class A1, class A2>
183 SQFUNCTION SqGlobalOverloadedFunc(R & (*/*method*/)(A1, A2)) {
184  return &SqGlobal<R&>::template Func2<A1, A2, 2, true>;
185 }
186 
187 // Arg Count 3
188 template <class R, class A1, class A2, class A3>
189 SQFUNCTION SqGlobalOverloadedFunc(R (*/*method*/)(A1, A2, A3)) {
190  return &SqGlobal<R>::template Func3<A1, A2, A3, 2, true>;
191 }
192 
193 template <class R, class A1, class A2, class A3>
194 SQFUNCTION SqGlobalOverloadedFunc(R & (*/*method*/)(A1, A2, A3)) {
195  return &SqGlobal<R&>::template Func3<A1, A2, A3, 2, true>;
196 }
197 
198 // Arg Count 4
199 template <class R, class A1, class A2, class A3, class A4>
200 SQFUNCTION SqGlobalOverloadedFunc(R (*/*method*/)(A1, A2, A3, A4)) {
201  return &SqGlobal<R>::template Func4<A1, A2, A3, A4, 2, true>;
202 }
203 
204 template <class R, class A1, class A2, class A3, class A4>
205 SQFUNCTION SqGlobalOverloadedFunc(R & (*/*method*/)(A1, A2, A3, A4)) {
206  return &SqGlobal<R& >::template Func4<A1, A2, A3, A4, 2, true>;
207 }
208 
209 // Arg Count 5
210 template <class R, class A1, class A2, class A3, class A4, class A5>
211 SQFUNCTION SqGlobalOverloadedFunc(R (*/*method*/)(A1, A2, A3, A4, A5)) {
212  return &SqGlobal<R>::template Func5<A1, A2, A3, A4, A5, 2, true>;
213 }
214 
215 template <class R, class A1, class A2, class A3, class A4, class A5>
216 SQFUNCTION SqGlobalOverloadedFunc(R & (*/*method*/)(A1, A2, A3, A4, A5)) {
217  return &SqGlobal<R&>::template Func5<A1, A2, A3, A4, A5, 2, true>;
218 }
219 
220 // Arg Count 6
221 template <class R, class A1, class A2, class A3, class A4, class A5, class A6>
222 SQFUNCTION SqGlobalOverloadedFunc(R (*/*method*/)(A1, A2, A3, A4, A5, A6)) {
223  return &SqGlobal<R>::template Func6<A1, A2, A3, A4, A5, A6, 2, true>;
224 }
225 
226 template <class R, class A1, class A2, class A3, class A4, class A5, class A6>
227 SQFUNCTION SqGlobalOverloadedFunc(R & (*/*method*/)(A1, A2, A3, A4, A5, A6)) {
228  return &SqGlobal<R&>::template Func6<A1, A2, A3, A4, A5, A6, 2, true>;
229 }
230 
231 // Arg Count 7
232 template <class R, class A1, class A2, class A3, class A4, class A5, class A6, class A7>
233 SQFUNCTION SqGlobalOverloadedFunc(R (*/*method*/)(A1, A2, A3, A4, A5, A6, A7)) {
234  return &SqGlobal<R>::template Func7<A1, A2, A3, A4, A5, A6, A7, 2, true>;
235 }
236 
237 template <class R, class A1, class A2, class A3, class A4, class A5, class A6, class A7>
238 SQFUNCTION SqGlobalOverloadedFunc(R & (*/*method*/)(A1, A2, A3, A4, A5, A6, A7)) {
239  return &SqGlobal<R&>::template Func7<A1, A2, A3, A4, A5, A6, A7, 2, true>;
240 }
241 
242 // Arg Count 8
243 template <class R, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8>
244 SQFUNCTION SqGlobalOverloadedFunc(R (*/*method*/)(A1, A2, A3, A4, A5, A6, A7, A8)) {
245  return &SqGlobal<R>::template Func8<A1, A2, A3, A4, A5, A6, A7, A8, 2, true>;
246 }
247 
248 template <class R, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8>
249 SQFUNCTION SqGlobalOverloadedFunc(R & (*/*method*/)(A1, A2, A3, A4, A5, A6, A7, A8)) {
250  return &SqGlobal<R&>::template Func8<A1, A2, A3, A4, A5, A6, A7, A8, 2, true>;
251 }
252 
253 // Arg Count 9
254 template <class R, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9>
255 SQFUNCTION SqGlobalOverloadedFunc(R (*/*method*/)(A1, A2, A3, A4, A5, A6, A7, A8, A9)) {
256  return &SqGlobal<R>::template Func9<A1, A2, A3, A4, A5, A6, A7, A8, A9, 2, true>;
257 }
258 
259 template <class R, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9>
260 SQFUNCTION SqGlobalOverloadedFunc(R & (*/*method*/)(A1, A2, A3, A4, A5, A6, A7, A8, A9)) {
261  return &SqGlobal<R&>::template Func9<A1, A2, A3, A4, A5, A6, A7, A8, A9, 2, true>;
262 }
263 
264 // Arg Count 10
265 template <class R, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9, class A10>
266 SQFUNCTION SqGlobalOverloadedFunc(R (*/*method*/)(A1, A2, A3, A4, A5, A6, A7, A8, A9, A10)) {
267  return &SqGlobal<R>::template Func10<A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, 2, true>;
268 }
269 
270 template <class R, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9, class A10>
271 SQFUNCTION SqGlobalOverloadedFunc(R & (*/*method*/)(A1, A2, A3, A4, A5, A6, A7, A8, A9, A10)) {
272  return &SqGlobal<R&>::template Func10<A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, 2, true>;
273 }
274 
275 // Arg Count 11
276 template <class R, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9, class A10, class A11>
277 SQFUNCTION SqGlobalOverloadedFunc(R (*/*method*/)(A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11)) {
278  return &SqGlobal<R>::template Func11<A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, 2, true>;
279 }
280 
281 template <class R, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9, class A10, class A11>
282 SQFUNCTION SqGlobalOverloadedFunc(R & (*/*method*/)(A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11)) {
283  return &SqGlobal<R&>::template Func11<A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, 2, true>;
284 }
285 
286 // Arg Count 12
287 template <class R, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9, class A10, class A11, class A12>
288 SQFUNCTION SqGlobalOverloadedFunc(R (*/*method*/)(A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12)) {
289  return &SqGlobal<R>::template Func12<A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, 2, true>;
290 }
291 
292 template <class R, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9, class A10, class A11, class A12>
293 SQFUNCTION SqGlobalOverloadedFunc(R & (*/*method*/)(A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12)) {
294  return &SqGlobal<R&>::template Func12<A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, 2, true>;
295 }
296 
297 // Arg Count 13
298 template <class R, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9, class A10, class A11, class A12, class A13>
299 SQFUNCTION SqGlobalOverloadedFunc(R (*/*method*/)(A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13)) {
300  return &SqGlobal<R>::template Func13<A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, 2, true>;
301 }
302 
303 template <class R, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9, class A10, class A11, class A12, class A13>
304 SQFUNCTION SqGlobalOverloadedFunc(R & (*/*method*/)(A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13)) {
305  return &SqGlobal<R&>::template Func13<A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, 2, true>;
306 }
307 
308 // Arg Count 14
309 template <class R, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9, class A10, class A11, class A12, class A13, class A14>
310 SQFUNCTION SqGlobalOverloadedFunc(R (*/*method*/)(A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14)) {
311  return &SqGlobal<R>::template Func14<A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, 2, true>;
312 }
313 template <class R, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9, class A10, class A11, class A12, class A13, class A14>
314 SQFUNCTION SqGlobalOverloadedFunc(R & (*/*method*/)(A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14)) {
315  return &SqGlobal<R&>::template Func14<A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, 2, true>;
316 }
317 
318 
319 //
320 // Member Global Overloaded Function Resolvers
321 //
322 
323 // Arg Count 1
324 template <class R, class A1>
325 SQFUNCTION SqMemberGlobalOverloadedFunc(R (*/*method*/)(A1)) {
326  return &SqGlobal<R>::template Func1<A1, 1, true>;
327 }
328 
329 template <class R, class A1>
330 SQFUNCTION SqMemberGlobalOverloadedFunc(R & (*/*method*/)(A1)) {
331  return &SqGlobal<R&>::template Func1<A1, 1, true>;
332 }
333 
334 // Arg Count 2
335 template <class R, class A1, class A2>
336 SQFUNCTION SqMemberGlobalOverloadedFunc(R (*/*method*/)(A1, A2)) {
337  return &SqGlobal<R>::template Func2<A1, A2, 1, true>;
338 }
339 
340 template <class R, class A1, class A2>
341 SQFUNCTION SqMemberGlobalOverloadedFunc(R & (*/*method*/)(A1, A2)) {
342  return &SqGlobal<R&>::template Func2<A1, A2, 1, true>;
343 }
344 
345 // Arg Count 3
346 template <class R, class A1, class A2, class A3>
347 SQFUNCTION SqMemberGlobalOverloadedFunc(R (*/*method*/)(A1, A2, A3)) {
348  return &SqGlobal<R>::template Func3<A1, A2, A3, 1, true>;
349 }
350 
351 template <class R, class A1, class A2, class A3>
352 SQFUNCTION SqMemberGlobalOverloadedFunc(R & (*/*method*/)(A1, A2, A3)) {
353  return &SqGlobal<R&>::template Func3<A1, A2, A3, 1, true>;
354 }
355 
356 // Arg Count 4
357 template <class R, class A1, class A2, class A3, class A4>
358 SQFUNCTION SqMemberGlobalOverloadedFunc(R (*/*method*/)(A1, A2, A3, A4)) {
359  return &SqGlobal<R>::template Func4<A1, A2, A3, A4, 1, true>;
360 }
361 
362 template <class R, class A1, class A2, class A3, class A4>
363 SQFUNCTION SqMemberGlobalOverloadedFunc(R & (*/*method*/)(A1, A2, A3, A4)) {
364  return &SqGlobal<R&>::template Func4<A1, A2, A3, A4, 1, true>;
365 }
366 
367 // Arg Count 5
368 template <class R, class A1, class A2, class A3, class A4, class A5>
369 SQFUNCTION SqMemberGlobalOverloadedFunc(R (*/*method*/)(A1, A2, A3, A4, A5)) {
370  return &SqGlobal<R>::template Func5<A1, A2, A3, A4, A5, 1, true>;
371 }
372 
373 template <class R, class A1, class A2, class A3, class A4, class A5>
374 SQFUNCTION SqMemberGlobalOverloadedFunc(R & (*/*method*/)(A1, A2, A3, A4, A5)) {
375  return &SqGlobal<R&>::template Func5<A1, A2, A3, A4, A5, 1, true>;
376 }
377 
378 // Arg Count 6
379 template <class R, class A1, class A2, class A3, class A4, class A5, class A6>
380 SQFUNCTION SqMemberGlobalOverloadedFunc(R (*/*method*/)(A1, A2, A3, A4, A5, A6)) {
381  return &SqGlobal<R>::template Func6<A1, A2, A3, A4, A5, A6, 1, true>;
382 }
383 
384 template <class R, class A1, class A2, class A3, class A4, class A5, class A6>
385 SQFUNCTION SqMemberGlobalOverloadedFunc(R & (*/*method*/)(A1, A2, A3, A4, A5, A6)) {
386  return &SqGlobal<R&>::template Func6<A1, A2, A3, A4, A5, A6, 1, true>;
387 }
388 
389 // Arg Count 7
390 template <class R, class A1, class A2, class A3, class A4, class A5, class A6, class A7>
391 SQFUNCTION SqMemberGlobalOverloadedFunc(R (*/*method*/)(A1, A2, A3, A4, A5, A6, A7)) {
392  return &SqGlobal<R>::template Func7<A1, A2, A3, A4, A5, A6, A7, 1, true>;
393 }
394 
395 template <class R, class A1, class A2, class A3, class A4, class A5, class A6, class A7>
396 SQFUNCTION SqMemberGlobalOverloadedFunc(R & (*/*method*/)(A1, A2, A3, A4, A5, A6, A7)) {
397  return &SqGlobal<R&>::template Func7<A1, A2, A3, A4, A5, A6, A7, 1, true>;
398 }
399 
400 // Arg Count 8
401 template <class R, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8>
402 SQFUNCTION SqMemberGlobalOverloadedFunc(R (*/*method*/)(A1, A2, A3, A4, A5, A6, A7, A8)) {
403  return &SqGlobal<R>::template Func8<A1, A2, A3, A4, A5, A6, A7, A8, 1, true>;
404 }
405 
406 template <class R, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8>
407 SQFUNCTION SqMemberGlobalOverloadedFunc(R & (*/*method*/)(A1, A2, A3, A4, A5, A6, A7, A8)) {
408  return &SqGlobal<R&>::template Func8<A1, A2, A3, A4, A5, A6, A7, A8, 1, true>;
409 }
410 
411 // Arg Count 9
412 template <class R, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9>
413 SQFUNCTION SqMemberGlobalOverloadedFunc(R (*/*method*/)(A1, A2, A3, A4, A5, A6, A7, A8, A9)) {
414  return &SqGlobal<R>::template Func9<A1, A2, A3, A4, A5, A6, A7, A8, A9, 1, true>;
415 }
416 
417 template <class R, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9>
418 SQFUNCTION SqMemberGlobalOverloadedFunc(R & (*/*method*/)(A1, A2, A3, A4, A5, A6, A7, A8, A9)) {
419  return &SqGlobal<R&>::template Func9<A1, A2, A3, A4, A5, A6, A7, A8, A9, 1, true>;
420 }
421 
422 // Arg Count 10
423 template <class R, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9, class A10>
424 SQFUNCTION SqMemberGlobalOverloadedFunc(R (*/*method*/)(A1, A2, A3, A4, A5, A6, A7, A8, A9, A10)) {
425  return &SqGlobal<R>::template Func10<A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, 1, true>;
426 }
427 
428 template <class R, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9, class A10>
429 SQFUNCTION SqMemberGlobalOverloadedFunc(R & (*/*method*/)(A1, A2, A3, A4, A5, A6, A7, A8, A9, A10)) {
430  return &SqGlobal<R&>::template Func10<A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, 1, true>;
431 }
432 
433 // Arg Count 11
434 template <class R, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9, class A10, class A11>
435 SQFUNCTION SqMemberGlobalOverloadedFunc(R (*/*method*/)(A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11)) {
436  return &SqGlobal<R>::template Func11<A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, 1, true>;
437 }
438 
439 template <class R, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9, class A10, class A11>
440 SQFUNCTION SqMemberGlobalOverloadedFunc(R & (*/*method*/)(A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11)) {
441  return &SqGlobal<R&>::template Func11<A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, 1, true>;
442 }
443 
444 // Arg Count 12
445 template <class R, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9, class A10, class A11, class A12>
446 SQFUNCTION SqMemberGlobalOverloadedFunc(R (*/*method*/)(A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12)) {
447  return &SqGlobal<R>::template Func12<A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, 1, true>;
448 }
449 
450 template <class R, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9, class A10, class A11, class A12>
451 SQFUNCTION SqMemberGlobalOverloadedFunc(R & (*/*method*/)(A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12)) {
452  return &SqGlobal<R&>::template Func12<A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, 1, true>;
453 }
454 
455 // Arg Count 13
456 template <class R, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9, class A10, class A11, class A12, class A13>
457 SQFUNCTION SqMemberGlobalOverloadedFunc(R (*/*method*/)(A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13)) {
458  return &SqGlobal<R>::template Func13<A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, 1, true>;
459 }
460 
461 template <class R, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9, class A10, class A11, class A12, class A13>
462 SQFUNCTION SqMemberGlobalOverloadedFunc(R & (*/*method*/)(A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13)) {
463  return &SqGlobal<R&>::template Func13<A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, 1, true>;
464 }
465 
466 // Arg Count 14
467 template <class R, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9, class A10, class A11, class A12, class A13, class A14>
468 SQFUNCTION SqMemberGlobalOverloadedFunc(R (*/*method*/)(A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14)) {
469  return &SqGlobal<R>::template Func14<A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, 1, true>;
470 }
471 
472 template <class R, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9, class A10, class A11, class A12, class A13, class A14>
473 SQFUNCTION SqMemberGlobalOverloadedFunc(R & (*/*method*/)(A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14)) {
474  return &SqGlobal<R&>::template Func14<A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, 1, true>;
475 }
476 
477 
478 //
479 // Member Overloaded Function Resolvers
480 //
481 
482 // Arg Count 0
483 template <class C, class R>
484 inline SQFUNCTION SqMemberOverloadedFunc(R (C::*/*method*/)()) {
485  return &SqMember<C, R>::template Func0<true>;
486 }
487 
488 template <class C, class R>
489 inline SQFUNCTION SqMemberOverloadedFunc(R (C::*/*method*/)() const) {
490  return &SqMember<C, R>::template Func0C<true>;
491 }
492 
493 template <class C, class R>
494 inline SQFUNCTION SqMemberOverloadedFunc(R & (C::*/*method*/)()) {
495  return &SqMember<C, R&>::template Func0<true>;
496 }
497 template <class C, class R>
498 inline SQFUNCTION SqMemberOverloadedFunc(R & (C::*/*method*/)() const) {
499  return &SqMember<C, R&>::template Func0C<true>;
500 }
501 
502 // Arg Count 1
503 template <class C, class R, class A1>
504 inline SQFUNCTION SqMemberOverloadedFunc(R (C::*/*method*/)(A1)) {
505  return &SqMember<C, R>::template Func1<A1, true>;
506 }
507 
508 template <class C, class R, class A1>
509 inline SQFUNCTION SqMemberOverloadedFunc(R (C::*/*method*/)(A1) const) {
510  return &SqMember<C, R>::template Func1C<A1, true>;
511 }
512 
513 template <class C, class R, class A1>
514 inline SQFUNCTION SqMemberOverloadedFunc(R & (C::*/*method*/)(A1)) {
515  return &SqMember<C, R&>::template Func1<A1, true>;
516 }
517 
518 template <class C, class R, class A1>
519 inline SQFUNCTION SqMemberOverloadedFunc(R & (C::*/*method*/)(A1) const) {
520  return &SqMember<C, R&>::template Func1C<A1, true>;
521 }
522 
523 // Arg Count 2
524 template <class C, class R, class A1, class A2>
525 inline SQFUNCTION SqMemberOverloadedFunc(R (C::*/*method*/)(A1, A2)) {
526  return &SqMember<C, R>::template Func2<A1, A2, true>;
527 }
528 
529 template <class C, class R, class A1, class A2>
530 inline SQFUNCTION SqMemberOverloadedFunc(R (C::*/*method*/)(A1, A2) const) {
531  return &SqMember<C, R>::template Func2C<A1, A2, true>;
532 }
533 
534 template <class C, class R, class A1, class A2>
535 inline SQFUNCTION SqMemberOverloadedFunc(R & (C::*/*method*/)(A1, A2)) {
536  return &SqMember<C, R&>::template Func2<A1, A2, true>;
537 }
538 
539 template <class C, class R, class A1, class A2>
540 inline SQFUNCTION SqMemberOverloadedFunc(R & (C::*/*method*/)(A1, A2) const) {
541  return &SqMember<C, R&>::template Func2C<A1, A2, true>;
542 }
543 
544 // Arg Count 3
545 template <class C, class R, class A1, class A2, class A3>
546 inline SQFUNCTION SqMemberOverloadedFunc(R (C::*/*method*/)(A1, A2, A3)) {
547  return &SqMember<C, R>::template Func3<A1, A2, A3, true>;
548 }
549 
550 template <class C, class R, class A1, class A2, class A3>
551 inline SQFUNCTION SqMemberOverloadedFunc(R (C::*/*method*/)(A1, A2, A3) const) {
552  return &SqMember<C, R>::template Func3C<A1, A2, A3, true>;
553 }
554 template <class C, class R, class A1, class A2, class A3>
555 inline SQFUNCTION SqMemberOverloadedFunc(R & (C::*/*method*/)(A1, A2, A3)) {
556  return &SqMember<C, R&>::template Func3<A1, A2, A3, true>;
557 }
558 
559 template <class C, class R, class A1, class A2, class A3>
560 inline SQFUNCTION SqMemberOverloadedFunc(R & (C::*/*method*/)(A1, A2, A3) const) {
561  return &SqMember<C, R&>::template Func3C<A1, A2, A3, true>;
562 }
563 
564 // Arg Count 4
565 template <class C, class R, class A1, class A2, class A3, class A4>
566 inline SQFUNCTION SqMemberOverloadedFunc(R (C::*/*method*/)(A1, A2, A3, A4)) {
567  return &SqMember<C, R>::template Func4<A1, A2, A3, A4, true>;
568 }
569 
570 template <class C, class R, class A1, class A2, class A3, class A4>
571 inline SQFUNCTION SqMemberOverloadedFunc(R (C::*/*method*/)(A1, A2, A3, A4) const) {
572  return &SqMember<C, R>::template Func4C<A1, A2, A3, A4, true>;
573 }
574 
575 template <class C, class R, class A1, class A2, class A3, class A4>
576 inline SQFUNCTION SqMemberOverloadedFunc(R & (C::*/*method*/)(A1, A2, A3, A4)) {
577  return &SqMember<C, R&>::template Func4<A1, A2, A3, A4, true>;
578 }
579 
580 template <class C, class R, class A1, class A2, class A3, class A4>
581 inline SQFUNCTION SqMemberOverloadedFunc(R & (C::*/*method*/)(A1, A2, A3, A4) const) {
582  return &SqMember<C, R&>::template Func4C<A1, A2, A3, A4, true>;
583 }
584 
585 // Arg Count 5
586 template <class C, class R, class A1, class A2, class A3, class A4, class A5>
587 inline SQFUNCTION SqMemberOverloadedFunc(R (C::*/*method*/)(A1, A2, A3, A4, A5)) {
588  return &SqMember<C, R>::template Func5<A1, A2, A3, A4, A5, true>;
589 }
590 
591 template <class C, class R, class A1, class A2, class A3, class A4, class A5>
592 inline SQFUNCTION SqMemberOverloadedFunc(R (C::*/*method*/)(A1, A2, A3, A4, A5) const) {
593  return &SqMember<C, R>::template Func5C<A1, A2, A3, A4, A5, true>;
594 }
595 
596 template <class C, class R, class A1, class A2, class A3, class A4, class A5>
597 inline SQFUNCTION SqMemberOverloadedFunc(R & (C::*/*method*/)(A1, A2, A3, A4, A5)) {
598  return &SqMember<C, R&>::template Func5<A1, A2, A3, A4, A5, true>;
599 }
600 
601 template <class C, class R, class A1, class A2, class A3, class A4, class A5>
602 inline SQFUNCTION SqMemberOverloadedFunc(R & (C::*/*method*/)(A1, A2, A3, A4, A5) const) {
603  return &SqMember<C, R&>::template Func5C<A1, A2, A3, A4, A5, true>;
604 }
605 
606 // Arg Count 6
607 template <class C, class R, class A1, class A2, class A3, class A4, class A5, class A6>
608 inline SQFUNCTION SqMemberOverloadedFunc(R (C::*/*method*/)(A1, A2, A3, A4, A5, A6)) {
609  return &SqMember<C, R>::template Func6<A1, A2, A3, A4, A5, A6, true>;
610 }
611 
612 template <class C, class R, class A1, class A2, class A3, class A4, class A5, class A6>
613 inline SQFUNCTION SqMemberOverloadedFunc(R (C::*/*method*/)(A1, A2, A3, A4, A5, A6) const) {
614  return &SqMember<C, R>::template Func6C<A1, A2, A3, A4, A5, A6, true>;
615 }
616 
617 template <class C, class R, class A1, class A2, class A3, class A4, class A5, class A6>
618 inline SQFUNCTION SqMemberOverloadedFunc(R & (C::*/*method*/)(A1, A2, A3, A4, A5, A6)) {
619  return &SqMember<C, R&>::template Func6<A1, A2, A3, A4, A5, A6, true>;
620 }
621 
622 template <class C, class R, class A1, class A2, class A3, class A4, class A5, class A6>
623 inline SQFUNCTION SqMemberOverloadedFunc(R & (C::*/*method*/)(A1, A2, A3, A4, A5, A6) const) {
624  return &SqMember<C, R&>::template Func6C<A1, A2, A3, A4, A5, A6, true>;
625 }
626 
627 // Arg Count 7
628 template <class C, class R, class A1, class A2, class A3, class A4, class A5, class A6, class A7>
629 inline SQFUNCTION SqMemberOverloadedFunc(R (C::*/*method*/)(A1, A2, A3, A4, A5, A6, A7)) {
630  return &SqMember<C, R>::template Func7<A1, A2, A3, A4, A5, A6, A7, true>;
631 }
632 
633 template <class C, class R, class A1, class A2, class A3, class A4, class A5, class A6, class A7>
634 inline SQFUNCTION SqMemberOverloadedFunc(R (C::*/*method*/)(A1, A2, A3, A4, A5, A6, A7) const) {
635  return &SqMember<C, R>::template Func7C<A1, A2, A3, A4, A5, A6, A7, true>;
636 }
637 
638 template <class C, class R, class A1, class A2, class A3, class A4, class A5, class A6, class A7>
639 inline SQFUNCTION SqMemberOverloadedFunc(R & (C::*/*method*/)(A1, A2, A3, A4, A5, A6, A7)) {
640  return &SqMember<C, R&>::template Func7<A1, A2, A3, A4, A5, A6, A7, true>;
641 }
642 
643 template <class C, class R, class A1, class A2, class A3, class A4, class A5, class A6, class A7>
644 inline SQFUNCTION SqMemberOverloadedFunc(R & (C::*/*method*/)(A1, A2, A3, A4, A5, A6, A7) const) {
645  return &SqMember<C, R&>::template Func7C<A1, A2, A3, A4, A5, A6, A7, true>;
646 }
647 
648 // Arg Count 8
649 template <class C, class R, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8>
650 inline SQFUNCTION SqMemberOverloadedFunc(R (C::*/*method*/)(A1, A2, A3, A4, A5, A6, A7, A8)) {
651  return &SqMember<C, R>::template Func8<A1, A2, A3, A4, A5, A6, A7, A8, true>;
652 }
653 
654 template <class C, class R, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8>
655 inline SQFUNCTION SqMemberOverloadedFunc(R (C::*/*method*/)(A1, A2, A3, A4, A5, A6, A7, A8) const) {
656  return &SqMember<C, R>::template Func8C<A1, A2, A3, A4, A5, A6, A7, A8, true>;
657 }
658 
659 template <class C, class R, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8>
660 inline SQFUNCTION SqMemberOverloadedFunc(R & (C::*/*method*/)(A1, A2, A3, A4, A5, A6, A7, A8)) {
661  return &SqMember<C, R&>::template Func8<A1, A2, A3, A4, A5, A6, A7, A8, true>;
662 }
663 
664 template <class C, class R, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8>
665 inline SQFUNCTION SqMemberOverloadedFunc(R & (C::*/*method*/)(A1, A2, A3, A4, A5, A6, A7, A8) const) {
666  return &SqMember<C, R&>::template Func8C<A1, A2, A3, A4, A5, A6, A7, A8, true>;
667 }
668 
669 // Arg Count 9
670 template <class C, class R, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9>
671 inline SQFUNCTION SqMemberOverloadedFunc(R (C::*/*method*/)(A1, A2, A3, A4, A5, A6, A7, A8, A9)) {
672  return &SqMember<C, R>::template Func9<A1, A2, A3, A4, A5, A6, A7, A8, A9, true>;
673 }
674 
675 template <class C, class R, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9>
676 inline SQFUNCTION SqMemberOverloadedFunc(R (C::*/*method*/)(A1, A2, A3, A4, A5, A6, A7, A8, A9) const) {
677  return &SqMember<C, R>::template Func9C<A1, A2, A3, A4, A5, A6, A7, A8, A9, true>;
678 }
679 
680 template <class C, class R, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9>
681 inline SQFUNCTION SqMemberOverloadedFunc(R & (C::*/*method*/)(A1, A2, A3, A4, A5, A6, A7, A8, A9)) {
682  return &SqMember<C, R&>::template Func9<A1, A2, A3, A4, A5, A6, A7, A8, A9, true>;
683 }
684 
685 template <class C, class R, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9>
686 inline SQFUNCTION SqMemberOverloadedFunc(R & (C::*/*method*/)(A1, A2, A3, A4, A5, A6, A7, A8, A9) const) {
687  return &SqMember<C, R&>::template Func9C<A1, A2, A3, A4, A5, A6, A7, A8, A9, true>;
688 }
689 
690 // Arg Count 10
691 template <class C, class R, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9, class A10>
692 inline SQFUNCTION SqMemberOverloadedFunc(R (C::*/*method*/)(A1, A2, A3, A4, A5, A6, A7, A8, A9, A10)) {
693  return &SqMember<C, R>::template Func10<A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, true>;
694 }
695 
696 template <class C, class R, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9, class A10>
697 inline SQFUNCTION SqMemberOverloadedFunc(R (C::*/*method*/)(A1, A2, A3, A4, A5, A6, A7, A8, A9, A10) const) {
698  return &SqMember<C, R>::template Func10C<A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, true>;
699 }
700 
701 template <class C, class R, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9, class A10>
702 inline SQFUNCTION SqMemberOverloadedFunc(R & (C::*/*method*/)(A1, A2, A3, A4, A5, A6, A7, A8, A9, A10)) {
703  return &SqMember<C, R&>::template Func10<A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, true>;
704 }
705 
706 template <class C, class R, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9, class A10>
707 inline SQFUNCTION SqMemberOverloadedFunc(R & (C::*/*method*/)(A1, A2, A3, A4, A5, A6, A7, A8, A9, A10) const) {
708  return &SqMember<C, R&>::template Func10C<A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, true>;
709 }
710 
711 // Arg Count 11
712 template <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>
713 inline SQFUNCTION SqMemberOverloadedFunc(R (C::*/*method*/)(A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11)) {
714  return &SqMember<C, R>::template Func11<A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, true>;
715 }
716 
717 template <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>
718 inline SQFUNCTION SqMemberOverloadedFunc(R (C::*/*method*/)(A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11) const) {
719  return &SqMember<C, R>::template Func11C<A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, true>;
720 }
721 
722 template <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>
723 inline SQFUNCTION SqMemberOverloadedFunc(R & (C::*/*method*/)(A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11)) {
724  return &SqMember<C, R&>::template Func11<A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, true>;
725 }
726 
727 template <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>
728 inline SQFUNCTION SqMemberOverloadedFunc(R & (C::*/*method*/)(A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11) const) {
729  return &SqMember<C, R&>::template Func11C<A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, true>;
730 }
731 
732 // Arg Count 12
733 template <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, class A12>
734 inline SQFUNCTION SqMemberOverloadedFunc(R (C::*/*method*/)(A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12)) {
735  return &SqMember<C, R>::template Func12<A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, true>;
736 }
737 
738 template <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, class A12>
739 inline SQFUNCTION SqMemberOverloadedFunc(R (C::*/*method*/)(A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12) const) {
740  return &SqMember<C, R>::template Func12C<A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, true>;
741 }
742 
743 template <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, class A12>
744 inline SQFUNCTION SqMemberOverloadedFunc(R & (C::*/*method*/)(A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12)) {
745  return &SqMember<C, R&>::template Func12<A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, true>;
746 }
747 
748 template <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, class A12>
749 inline SQFUNCTION SqMemberOverloadedFunc(R & (C::*/*method*/)(A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12) const) {
750  return &SqMember<C, R&>::template Func12C<A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, true>;
751 }
752 
753 // Arg Count 13
754 template <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, class A12, class A13>
755 inline SQFUNCTION SqMemberOverloadedFunc(R (C::*/*method*/)(A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13)) {
756  return &SqMember<C, R>::template Func13<A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, true>;
757 }
758 
759 template <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, class A12, class A13>
760 inline SQFUNCTION SqMemberOverloadedFunc(R (C::*/*method*/)(A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13) const) {
761  return &SqMember<C, R>::template Func13C<A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, true>;
762 }
763 
764 template <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, class A12, class A13>
765 inline SQFUNCTION SqMemberOverloadedFunc(R & (C::*/*method*/)(A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13)) {
766  return &SqMember<C, R&>::template Func13<A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, true>;
767 }
768 
769 template <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, class A12, class A13>
770 inline SQFUNCTION SqMemberOverloadedFunc(R & (C::*/*method*/)(A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13) const) {
771  return &SqMember<C, R&>::template Func13C<A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, true>;
772 }
773 
774 
775 // Arg Count 14
776 template <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, class A12, class A13, class A14>
777 inline SQFUNCTION SqMemberOverloadedFunc(R (C::*/*method*/)(A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14)) {
778  return &SqMember<C, R>::template Func14<A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, true>;
779 }
780 
781 template <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, class A12, class A13, class A14>
782 inline SQFUNCTION SqMemberOverloadedFunc(R (C::*/*method*/)(A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14) const) {
783  return &SqMember<C, R>::template Func14C<A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, true>;
784 }
785 template <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, class A12, class A13, class A14>
786 inline SQFUNCTION SqMemberOverloadedFunc(R & (C::*/*method*/)(A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14)) {
787  return &SqMember<C, R&>::template Func14<A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, true>;
788 }
789 
790 template <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, class A12, class A13, class A14>
791 inline SQFUNCTION SqMemberOverloadedFunc(R & (C::*/*method*/)(A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14) const) {
792  return &SqMember<C, R&>::template Func14C<A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, true>;
793 }
794 
795 
796 //
797 // Overload handler resolver
798 //
799 
800 template <class R>
801 inline SQFUNCTION SqOverloadFunc(R (*/*method*/)) {
802  return &SqOverload<R>::Func;
803 }
804 
805 template <class C, class R>
806 inline SQFUNCTION SqOverloadFunc(R (C::*/*method*/)) {
807  return &SqOverload<R>::Func;
808 }
809 
810 template <class C, class R>
811 inline SQFUNCTION SqOverloadFunc(R (C::*/*method*/)() const ) {
812  return &SqOverload<R>::Func;
813 }
814 
815 template <class C, class R, class A1>
816 inline SQFUNCTION SqOverloadFunc(R (C::*/*method*/)(A1) const ) {
817  return &SqOverload<R>::Func;
818 }
819 
820 template <class C, class R, class A1, class A2>
821 inline SQFUNCTION SqOverloadFunc(R (C::*/*method*/)(A1, A2) const ) {
822  return &SqOverload<R>::Func;
823 }
824 
825 template <class C, class R, class A1, class A2, class A3>
826 inline SQFUNCTION SqOverloadFunc(R (C::*/*method*/)(A1, A2, A3) const ) {
827  return &SqOverload<R>::Func;
828 }
829 
830 template <class C, class R, class A1, class A2, class A3, class A4>
831 inline SQFUNCTION SqOverloadFunc(R (C::*/*method*/)(A1, A2, A3, A4) const ) {
832  return &SqOverload<R>::Func;
833 }
834 
835 template <class C, class R, class A1, class A2, class A3, class A4, class A5>
836 inline SQFUNCTION SqOverloadFunc(R (C::*/*method*/)(A1, A2, A3, A4, A5) const ) {
837  return &SqOverload<R>::Func;
838 }
839 
840 template <class C, class R, class A1, class A2, class A3, class A4, class A5, class A6>
841 inline SQFUNCTION SqOverloadFunc(R (C::*/*method*/)(A1, A2, A3, A4, A5, A6) const ) {
842  return &SqOverload<R>::Func;
843 }
844 
845 template <class C, class R, class A1, class A2, class A3, class A4, class A5, class A6, class A7>
846 inline SQFUNCTION SqOverloadFunc(R (C::*/*method*/)(A1, A2, A3, A4, A5, A6, A7) const ) {
847  return &SqOverload<R>::Func;
848 }
849 
850 template <class C, class R, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8>
851 inline SQFUNCTION SqOverloadFunc(R (C::*/*method*/)(A1, A2, A3, A4, A5, A6, A7, A8) const ) {
852  return &SqOverload<R>::Func;
853 }
854 
855 template <class C, class R, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9>
856 inline SQFUNCTION SqOverloadFunc(R (C::*/*method*/)(A1, A2, A3, A4, A5, A6, A7, A8, A9) const ) {
857  return &SqOverload<R>::Func;
858 }
859 
860 template <class C, class R, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9, class A10>
861 inline SQFUNCTION SqOverloadFunc(R (C::*/*method*/)(A1, A2, A3, A4, A5, A6, A7, A8, A9, A10) const ) {
862  return &SqOverload<R>::Func;
863 }
864 
865 template <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>
866 inline SQFUNCTION SqOverloadFunc(R (C::*/*method*/)(A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11) const ) {
867  return &SqOverload<R>::Func;
868 }
869 
870 template <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, class A12>
871 inline SQFUNCTION SqOverloadFunc(R (C::*/*method*/)(A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12) const ) {
872  return &SqOverload<R>::Func;
873 }
874 
875 template <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, class A12, class A13>
876 inline SQFUNCTION SqOverloadFunc(R (C::*/*method*/)(A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13) const ) {
877  return &SqOverload<R>::Func;
878 }
879 
880 template <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, class A12, class A13, class A14>
881 inline SQFUNCTION SqOverloadFunc(R (C::*/*method*/)(A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14) const ) {
882  return &SqOverload<R>::Func;
883 }
884 
885 
886 //
887 // Query argument count
888 //
889 
890 // Arg Count 0
891 template <class R>
892 inline int SqGetArgCount(R (*/*method*/)()) {
893  return 0;
894 }
895 
896 // Arg Count 1
897 template <class R, class A1>
898 inline int SqGetArgCount(R (*/*method*/)(A1)) {
899  return 1;
900 }
901 
902 // Arg Count 2
903 template <class R, class A1, class A2>
904 inline int SqGetArgCount(R (*/*method*/)(A1, A2)) {
905  return 2;
906 }
907 
908 // Arg Count 3
909 template <class R, class A1, class A2, class A3>
910 inline int SqGetArgCount(R (*/*method*/)(A1, A2, A3)) {
911  return 3;
912 }
913 
914 // Arg Count 4
915 template <class R, class A1, class A2, class A3, class A4>
916 inline int SqGetArgCount(R (*/*method*/)(A1, A2, A3, A4)) {
917  return 4;
918 }
919 
920 // Arg Count 5
921 template <class R, class A1, class A2, class A3, class A4, class A5>
922 inline int SqGetArgCount(R (*/*method*/)(A1, A2, A3, A4, A5)) {
923  return 5;
924 }
925 
926 // Arg Count 6
927 template <class R, class A1, class A2, class A3, class A4, class A5, class A6>
928 inline int SqGetArgCount(R (*/*method*/)(A1, A2, A3, A4, A5, A6)) {
929  return 6;
930 }
931 
932 // Arg Count 7
933 template <class R, class A1, class A2, class A3, class A4, class A5, class A6, class A7>
934 inline int SqGetArgCount(R (*/*method*/)(A1, A2, A3, A4, A5, A6, A7)) {
935  return 7;
936 }
937 
938 // Arg Count 8
939 template <class R, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8>
940 inline int SqGetArgCount(R (*/*method*/)(A1, A2, A3, A4, A5, A6, A7, A8)) {
941  return 8;
942 }
943 
944 // Arg Count 9
945 template <class R, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9>
946 inline int SqGetArgCount(R (*/*method*/)(A1, A2, A3, A4, A5, A6, A7, A8, A9)) {
947  return 9;
948 }
949 
950 // Arg Count 10
951 template <class R, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9, class A10>
952 inline int SqGetArgCount(R (*/*method*/)(A1, A2, A3, A4, A5, A6, A7, A8, A9, A10)) {
953  return 10;
954 }
955 
956 // Arg Count 11
957 template <class R, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9, class A10, class A11>
958 inline int SqGetArgCount(R (*/*method*/)(A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11)) {
959  return 11;
960 }
961 
962 // Arg Count 12
963 template <class R, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9, class A10, class A11, class A12>
964 inline int SqGetArgCount(R (*/*method*/)(A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12)) {
965  return 12;
966 }
967 
968 // Arg Count 13
969 template <class R, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9, class A10, class A11, class A12, class A13>
970 inline int SqGetArgCount(R (*/*method*/)(A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13)) {
971  return 13;
972 }
973 
974 // Arg Count 14
975 template <class R, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9, class A10, class A11, class A12, class A13, class A14>
976 inline int SqGetArgCount(R (*/*method*/)(A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14)) {
977  return 14;
978 }
979 
980 
981 //
982 // Query member function argument count
983 //
984 
985 // Arg Count 0
986 template <class C, class R>
987 inline int SqGetArgCount(R (C::*/*method*/)()) {
988  return 0;
989 }
990 
991 // Arg Count 1
992 template <class C, class R, class A1>
993 inline int SqGetArgCount(R (C::*/*method*/)(A1)) {
994  return 1;
995 }
996 
997 // Arg Count 2
998 template <class C, class R, class A1, class A2>
999 inline int SqGetArgCount(R (C::*/*method*/)(A1, A2)) {
1000  return 2;
1001 }
1002 
1003 // Arg Count 3
1004 template <class C, class R, class A1, class A2, class A3>
1005 inline int SqGetArgCount(R (C::*/*method*/)(A1, A2, A3)) {
1006  return 3;
1007 }
1008 
1009 // Arg Count 4
1010 template <class C, class R, class A1, class A2, class A3, class A4>
1011 inline int SqGetArgCount(R (C::*/*method*/)(A1, A2, A3, A4)) {
1012  return 4;
1013 }
1014 
1015 // Arg Count 5
1016 template <class C, class R, class A1, class A2, class A3, class A4, class A5>
1017 inline int SqGetArgCount(R (C::*/*method*/)(A1, A2, A3, A4, A5)) {
1018  return 5;
1019 }
1020 
1021 // Arg Count 6
1022 template <class C, class R, class A1, class A2, class A3, class A4, class A5, class A6>
1023 inline int SqGetArgCount(R (C::*/*method*/)(A1, A2, A3, A4, A5, A6)) {
1024  return 6;
1025 }
1026 
1027 // Arg Count 7
1028 template <class C, class R, class A1, class A2, class A3, class A4, class A5, class A6, class A7>
1029 inline int SqGetArgCount(R (C::*/*method*/)(A1, A2, A3, A4, A5, A6, A7)) {
1030  return 7;
1031 }
1032 
1033 // Arg Count 8
1034 template <class C, class R, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8>
1035 inline int SqGetArgCount(R (C::*/*method*/)(A1, A2, A3, A4, A5, A6, A7, A8)) {
1036  return 8;
1037 }
1038 
1039 // Arg Count 9
1040 template <class C, class R, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9>
1041 inline int SqGetArgCount(R (C::*/*method*/)(A1, A2, A3, A4, A5, A6, A7, A8, A9)) {
1042  return 9;
1043 }
1044 
1045 // Arg Count 10
1046 template <class C, class R, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9, class A10>
1047 inline int SqGetArgCount(R (C::*/*method*/)(A1, A2, A3, A4, A5, A6, A7, A8, A9, A10)) {
1048  return 10;
1049 }
1050 
1051 // Arg Count 11
1052 template <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>
1053 inline int SqGetArgCount(R (C::*/*method*/)(A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11)) {
1054  return 11;
1055 }
1056 
1057 // Arg Count 12
1058 template <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, class A12>
1059 inline int SqGetArgCount(R (C::*/*method*/)(A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12)) {
1060  return 12;
1061 }
1062 
1063 // Arg Count 13
1064 template <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, class A12, class A13>
1065 inline int SqGetArgCount(R (C::*/*method*/)(A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13)) {
1066  return 13;
1067 }
1068 
1069 // Arg Count 14
1070 template <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, class A12, class A13, class A14>
1071 inline int SqGetArgCount(R (C::*/*method*/)(A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14)) {
1072  return 14;
1073 }
1074 
1075 
1076 //
1077 // Query const member function argument count
1078 //
1079 
1080 // Arg Count 0
1081 template <class C, class R>
1082 inline int SqGetArgCount(R (C::*/*method*/)() const) {
1083  return 0;
1084 }
1085 
1086 // Arg Count 1
1087 template <class C, class R, class A1>
1088 inline int SqGetArgCount(R (C::*/*method*/)(A1) const) {
1089  return 1;
1090 }
1091 
1092 // Arg Count 2
1093 template <class C, class R, class A1, class A2>
1094 inline int SqGetArgCount(R (C::*/*method*/)(A1, A2) const) {
1095  return 2;
1096 }
1097 
1098 // Arg Count 3
1099 template <class C, class R, class A1, class A2, class A3>
1100 inline int SqGetArgCount(R (C::*/*method*/)(A1, A2, A3) const) {
1101  return 3;
1102 }
1103 
1104 // Arg Count 4
1105 template <class C, class R, class A1, class A2, class A3, class A4>
1106 inline int SqGetArgCount(R (C::*/*method*/)(A1, A2, A3, A4) const) {
1107  return 4;
1108 }
1109 
1110 // Arg Count 5
1111 template <class C, class R, class A1, class A2, class A3, class A4, class A5>
1112 inline int SqGetArgCount(R (C::*/*method*/)(A1, A2, A3, A4, A5) const) {
1113  return 5;
1114 }
1115 
1116 // Arg Count 6
1117 template <class C, class R, class A1, class A2, class A3, class A4, class A5, class A6>
1118 inline int SqGetArgCount(R (C::*/*method*/)(A1, A2, A3, A4, A5, A6) const) {
1119  return 6;
1120 }
1121 
1122 // Arg Count 7
1123 template <class C, class R, class A1, class A2, class A3, class A4, class A5, class A6, class A7>
1124 inline int SqGetArgCount(R (C::*/*method*/)(A1, A2, A3, A4, A5, A6, A7) const) {
1125  return 7;
1126 }
1127 
1128 // Arg Count 8
1129 template <class C, class R, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8>
1130 inline int SqGetArgCount(R (C::*/*method*/)(A1, A2, A3, A4, A5, A6, A7, A8) const) {
1131  return 8;
1132 }
1133 
1134 // Arg Count 9
1135 template <class C, class R, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9>
1136 inline int SqGetArgCount(R (C::*/*method*/)(A1, A2, A3, A4, A5, A6, A7, A8, A9) const) {
1137  return 9;
1138 }
1139 
1140 // Arg Count 10
1141 template <class C, class R, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9, class A10>
1142 inline int SqGetArgCount(R (C::*/*method*/)(A1, A2, A3, A4, A5, A6, A7, A8, A9, A10) const) {
1143  return 10;
1144 }
1145 
1146 // Arg Count 11
1147 template <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>
1148 inline int SqGetArgCount(R (C::*/*method*/)(A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11) const) {
1149  return 11;
1150 }
1151 
1152 // Arg Count 12
1153 template <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, class A12>
1154 inline int SqGetArgCount(R (C::*/*method*/)(A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12) const) {
1155  return 12;
1156 }
1157 
1158 // Arg Count 13
1159 template <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, class A12, class A13>
1160 inline int SqGetArgCount(R (C::*/*method*/)(A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13) const) {
1161  return 13;
1162 }
1163 
1164 // Arg Count 14
1165 template <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, class A12, class A13, class A14>
1166 inline int SqGetArgCount(R (C::*/*method*/)(A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14) const) {
1167  return 14;
1168 }
1169 
1171 
1172 }
1173 
1174 #endif
static bool IsEnabled()
Definition: sqratUtil.h:244
static Error & Instance()
Definition: sqratUtil.h:134