BDE 4.14.0 Production release
Loading...
Searching...
No Matches
bslmf_functionpointertraits_cpp03.h
Go to the documentation of this file.
1/// @file bslmf_functionpointertraits_cpp03.h
2///
3/// The content of this file has been pre-processed for Doxygen.
4///
5
6
7// bslmf_functionpointertraits_cpp03.h -*-C++-*-
8
9// Automatically generated file. **DO NOT EDIT**
10
11#ifndef INCLUDED_BSLMF_FUNCTIONPOINTERTRAITS_CPP03
12#define INCLUDED_BSLMF_FUNCTIONPOINTERTRAITS_CPP03
13
14/// @defgroup bslmf_functionpointertraits_cpp03 bslmf_functionpointertraits_cpp03
15/// @brief Provide C++03 implementation for bslmf_functionpointertraits.h
16/// @addtogroup bsl
17/// @{
18/// @addtogroup bslmf
19/// @{
20/// @addtogroup bslmf_functionpointertraits_cpp03
21/// @{
22///
23/// <h1> Outline </h1>
24/// * <a href="#bslmf_functionpointertraits_cpp03-purpose"> Purpose</a>
25/// * <a href="#bslmf_functionpointertraits_cpp03-classes"> Classes </a>
26/// * <a href="#bslmf_functionpointertraits_cpp03-description"> Description </a>
27///
28/// # Purpose {#bslmf_functionpointertraits_cpp03-purpose}
29/// Provide C++03 implementation for bslmf_functionpointertraits.h
30///
31/// # Classes {#bslmf_functionpointertraits_cpp03-classes}
32/// See bslmf_functionpointertraits.h for list of classes
33///
34/// @see bslmf_functionpointertraits
35///
36/// # Description {#bslmf_functionpointertraits_cpp03-description}
37/// This component is the C++03 translation of a C++11 component,
38/// generated by the 'sim_cpp11_features.pl' program. If the original header
39/// contains any specially delimited regions of C++11 code, then this generated
40/// file contains the C++03 equivalent, i.e., with variadic templates expanded
41/// and rvalue-references replaced by 'bslmf::MovableRef' objects. The header
42/// code in this file is designed to be '#include'd into the original header
43/// when compiling with a C++03 compiler. If there are no specially delimited
44/// regions of C++11 code, then this header contains no code and is not
45/// '#include'd in the original header.
46///
47/// Generated on Sun Sep 1 05:38:31 2024
48/// Command line: sim_cpp11_features.pl bslmf_functionpointertraits.h
49/// @}
50/** @} */
51/** @} */
52
53/** @addtogroup bsl
54 * @{
55 */
56/** @addtogroup bslmf
57 * @{
58 */
59/** @addtogroup bslmf_functionpointertraits_cpp03
60 * @{
61 */
62
63#ifdef COMPILING_BSLMF_FUNCTIONPOINTERTRAITS_H
64
65
66namespace bslmf {
67
68/// C++ function pointer linkage tag.
69struct FunctionPointerCPlusPlusLinkage {
70};
71
72/// C function pointer linkage tag.
73struct FunctionPointerCLinkage {
74};
75
76 // ===========================
77 // class FunctionPointerTraits
78 // ===========================
79
80/// This class gives information about the specified `t_PROTOTYPE`. The
81/// general definition gives no information, but specializations for
82/// function pointers types define nested types `ResultType`,
83/// `ArgumentList`, and `Linkage`.
84template <class t_PROTOTYPE>
85struct FunctionPointerTraits {
86
87 enum { IS_FUNCTION_POINTER = 0 };
88};
89
90 // =======================
91 // class IsFunctionPointer
92 // =======================
93
94/// This template determines if the specified `t_PROTOTYPE` is a free (i.e.,
95/// non-member) function pointer. `value` is defined as 1 if the specified
96/// `t_PROTOTYPE` is a function pointer type, and a zero value otherwise.
97template <class t_PROTOTYPE>
98struct IsFunctionPointer
100 bool,
101 FunctionPointerTraits<t_PROTOTYPE>::IS_FUNCTION_POINTER> {
102};
103
104// ---- Anything below this line is implementation specific. Do not use. ----
105
106#if defined(BSLS_COMPILERFEATURES_SUPPORT_NOEXCEPT_TYPES) && \
107 !defined(BSLS_COMPILERFEATURES_SUPPORT_VARIADIC_TEMPLATES)
108 // All of our compilers which identify 'noexcept' as part of the type
109 // system (a C++17 piece of functionality) similarly also support variadic
110 // templates, so we refrain from having the dead code to support this case.
111# error Feature not supported for compilers without variadic templates
112#endif
113
114 // ---------------------------
115 // class FunctionPointerTraits
116 // ---------------------------
117
118#if BSLS_COMPILERFEATURES_SIMULATE_VARIADIC_TEMPLATES
119// {{{ BEGIN GENERATED CODE
120// Command line: sim_cpp11_features.pl bslmf_functionpointertraits.h
121#ifndef BSLMF_FUNCTIONPOINTERTRAITS_VARIADIC_LIMIT
122#define BSLMF_FUNCTIONPOINTERTRAITS_VARIADIC_LIMIT 14
123#endif
124#ifndef BSLMF_FUNCTIONPOINTERTRAITS_VARIADIC_LIMIT_A
125#define BSLMF_FUNCTIONPOINTERTRAITS_VARIADIC_LIMIT_A BSLMF_FUNCTIONPOINTERTRAITS_VARIADIC_LIMIT
126#endif
127
128#if defined(BSLS_PLATFORM_CMP_CLANG) && (!defined(BSLS_PLATFORM_OS_DARWIN) \
129 || BSLS_PLATFORM_CMP_VER_MAJOR > 130000)
130#pragma clang diagnostic push
131#pragma clang diagnostic ignored "-Wdeprecated-volatile"
132#endif
133
134#if BSLMF_FUNCTIONPOINTERTRAITS_VARIADIC_LIMIT_A >= 0
135template <class t_BSLMF_RETURN>
136struct FunctionPointerTraits<t_BSLMF_RETURN (*)()> {
137
138 enum {
139 IS_FUNCTION_POINTER = 1,
140 IS_NOEXCEPT = 0
141 };
142 enum { e_IS_VARARG = 0 };
143 typedef t_BSLMF_RETURN ResultType;
144 typedef typename TypeList<>::Type ArgumentList;
145 typedef t_BSLMF_RETURN FuncType();
146 typedef FunctionPointerCPlusPlusLinkage Linkage;
147};
148#endif // BSLMF_FUNCTIONPOINTERTRAITS_VARIADIC_LIMIT_A >= 0
149
150#if BSLMF_FUNCTIONPOINTERTRAITS_VARIADIC_LIMIT_A >= 1
151template <class t_BSLMF_RETURN, class t_ARGS_01>
152struct FunctionPointerTraits<t_BSLMF_RETURN (*)(t_ARGS_01)> {
153
154 enum {
155 IS_FUNCTION_POINTER = 1,
156 IS_NOEXCEPT = 0
157 };
158 enum { e_IS_VARARG = 0 };
159 typedef t_BSLMF_RETURN ResultType;
160 typedef typename TypeList<t_ARGS_01>::Type ArgumentList;
161 typedef t_BSLMF_RETURN FuncType(t_ARGS_01);
162 typedef FunctionPointerCPlusPlusLinkage Linkage;
163};
164#endif // BSLMF_FUNCTIONPOINTERTRAITS_VARIADIC_LIMIT_A >= 1
165
166#if BSLMF_FUNCTIONPOINTERTRAITS_VARIADIC_LIMIT_A >= 2
167template <class t_BSLMF_RETURN, class t_ARGS_01,
168 class t_ARGS_02>
169struct FunctionPointerTraits<t_BSLMF_RETURN (*)(t_ARGS_01,
170 t_ARGS_02)> {
171
172 enum {
173 IS_FUNCTION_POINTER = 1,
174 IS_NOEXCEPT = 0
175 };
176 enum { e_IS_VARARG = 0 };
177 typedef t_BSLMF_RETURN ResultType;
178 typedef typename TypeList<t_ARGS_01,
179 t_ARGS_02>::Type ArgumentList;
180 typedef t_BSLMF_RETURN FuncType(t_ARGS_01,
181 t_ARGS_02);
182 typedef FunctionPointerCPlusPlusLinkage Linkage;
183};
184#endif // BSLMF_FUNCTIONPOINTERTRAITS_VARIADIC_LIMIT_A >= 2
185
186#if BSLMF_FUNCTIONPOINTERTRAITS_VARIADIC_LIMIT_A >= 3
187template <class t_BSLMF_RETURN, class t_ARGS_01,
188 class t_ARGS_02,
189 class t_ARGS_03>
190struct FunctionPointerTraits<t_BSLMF_RETURN (*)(t_ARGS_01,
191 t_ARGS_02,
192 t_ARGS_03)> {
193
194 enum {
195 IS_FUNCTION_POINTER = 1,
196 IS_NOEXCEPT = 0
197 };
198 enum { e_IS_VARARG = 0 };
199 typedef t_BSLMF_RETURN ResultType;
200 typedef typename TypeList<t_ARGS_01,
201 t_ARGS_02,
202 t_ARGS_03>::Type ArgumentList;
203 typedef t_BSLMF_RETURN FuncType(t_ARGS_01,
204 t_ARGS_02,
205 t_ARGS_03);
206 typedef FunctionPointerCPlusPlusLinkage Linkage;
207};
208#endif // BSLMF_FUNCTIONPOINTERTRAITS_VARIADIC_LIMIT_A >= 3
209
210#if BSLMF_FUNCTIONPOINTERTRAITS_VARIADIC_LIMIT_A >= 4
211template <class t_BSLMF_RETURN, class t_ARGS_01,
212 class t_ARGS_02,
213 class t_ARGS_03,
214 class t_ARGS_04>
215struct FunctionPointerTraits<t_BSLMF_RETURN (*)(t_ARGS_01,
216 t_ARGS_02,
217 t_ARGS_03,
218 t_ARGS_04)> {
219
220 enum {
221 IS_FUNCTION_POINTER = 1,
222 IS_NOEXCEPT = 0
223 };
224 enum { e_IS_VARARG = 0 };
225 typedef t_BSLMF_RETURN ResultType;
226 typedef typename TypeList<t_ARGS_01,
227 t_ARGS_02,
228 t_ARGS_03,
229 t_ARGS_04>::Type ArgumentList;
230 typedef t_BSLMF_RETURN FuncType(t_ARGS_01,
231 t_ARGS_02,
232 t_ARGS_03,
233 t_ARGS_04);
234 typedef FunctionPointerCPlusPlusLinkage Linkage;
235};
236#endif // BSLMF_FUNCTIONPOINTERTRAITS_VARIADIC_LIMIT_A >= 4
237
238#if BSLMF_FUNCTIONPOINTERTRAITS_VARIADIC_LIMIT_A >= 5
239template <class t_BSLMF_RETURN, class t_ARGS_01,
240 class t_ARGS_02,
241 class t_ARGS_03,
242 class t_ARGS_04,
243 class t_ARGS_05>
244struct FunctionPointerTraits<t_BSLMF_RETURN (*)(t_ARGS_01,
245 t_ARGS_02,
246 t_ARGS_03,
247 t_ARGS_04,
248 t_ARGS_05)> {
249
250 enum {
251 IS_FUNCTION_POINTER = 1,
252 IS_NOEXCEPT = 0
253 };
254 enum { e_IS_VARARG = 0 };
255 typedef t_BSLMF_RETURN ResultType;
256 typedef typename TypeList<t_ARGS_01,
257 t_ARGS_02,
258 t_ARGS_03,
259 t_ARGS_04,
260 t_ARGS_05>::Type ArgumentList;
261 typedef t_BSLMF_RETURN FuncType(t_ARGS_01,
262 t_ARGS_02,
263 t_ARGS_03,
264 t_ARGS_04,
265 t_ARGS_05);
266 typedef FunctionPointerCPlusPlusLinkage Linkage;
267};
268#endif // BSLMF_FUNCTIONPOINTERTRAITS_VARIADIC_LIMIT_A >= 5
269
270#if BSLMF_FUNCTIONPOINTERTRAITS_VARIADIC_LIMIT_A >= 6
271template <class t_BSLMF_RETURN, class t_ARGS_01,
272 class t_ARGS_02,
273 class t_ARGS_03,
274 class t_ARGS_04,
275 class t_ARGS_05,
276 class t_ARGS_06>
277struct FunctionPointerTraits<t_BSLMF_RETURN (*)(t_ARGS_01,
278 t_ARGS_02,
279 t_ARGS_03,
280 t_ARGS_04,
281 t_ARGS_05,
282 t_ARGS_06)> {
283
284 enum {
285 IS_FUNCTION_POINTER = 1,
286 IS_NOEXCEPT = 0
287 };
288 enum { e_IS_VARARG = 0 };
289 typedef t_BSLMF_RETURN ResultType;
290 typedef typename TypeList<t_ARGS_01,
291 t_ARGS_02,
292 t_ARGS_03,
293 t_ARGS_04,
294 t_ARGS_05,
295 t_ARGS_06>::Type ArgumentList;
296 typedef t_BSLMF_RETURN FuncType(t_ARGS_01,
297 t_ARGS_02,
298 t_ARGS_03,
299 t_ARGS_04,
300 t_ARGS_05,
301 t_ARGS_06);
302 typedef FunctionPointerCPlusPlusLinkage Linkage;
303};
304#endif // BSLMF_FUNCTIONPOINTERTRAITS_VARIADIC_LIMIT_A >= 6
305
306#if BSLMF_FUNCTIONPOINTERTRAITS_VARIADIC_LIMIT_A >= 7
307template <class t_BSLMF_RETURN, class t_ARGS_01,
308 class t_ARGS_02,
309 class t_ARGS_03,
310 class t_ARGS_04,
311 class t_ARGS_05,
312 class t_ARGS_06,
313 class t_ARGS_07>
314struct FunctionPointerTraits<t_BSLMF_RETURN (*)(t_ARGS_01,
315 t_ARGS_02,
316 t_ARGS_03,
317 t_ARGS_04,
318 t_ARGS_05,
319 t_ARGS_06,
320 t_ARGS_07)> {
321
322 enum {
323 IS_FUNCTION_POINTER = 1,
324 IS_NOEXCEPT = 0
325 };
326 enum { e_IS_VARARG = 0 };
327 typedef t_BSLMF_RETURN ResultType;
328 typedef typename TypeList<t_ARGS_01,
329 t_ARGS_02,
330 t_ARGS_03,
331 t_ARGS_04,
332 t_ARGS_05,
333 t_ARGS_06,
334 t_ARGS_07>::Type ArgumentList;
335 typedef t_BSLMF_RETURN FuncType(t_ARGS_01,
336 t_ARGS_02,
337 t_ARGS_03,
338 t_ARGS_04,
339 t_ARGS_05,
340 t_ARGS_06,
341 t_ARGS_07);
342 typedef FunctionPointerCPlusPlusLinkage Linkage;
343};
344#endif // BSLMF_FUNCTIONPOINTERTRAITS_VARIADIC_LIMIT_A >= 7
345
346#if BSLMF_FUNCTIONPOINTERTRAITS_VARIADIC_LIMIT_A >= 8
347template <class t_BSLMF_RETURN, class t_ARGS_01,
348 class t_ARGS_02,
349 class t_ARGS_03,
350 class t_ARGS_04,
351 class t_ARGS_05,
352 class t_ARGS_06,
353 class t_ARGS_07,
354 class t_ARGS_08>
355struct FunctionPointerTraits<t_BSLMF_RETURN (*)(t_ARGS_01,
356 t_ARGS_02,
357 t_ARGS_03,
358 t_ARGS_04,
359 t_ARGS_05,
360 t_ARGS_06,
361 t_ARGS_07,
362 t_ARGS_08)> {
363
364 enum {
365 IS_FUNCTION_POINTER = 1,
366 IS_NOEXCEPT = 0
367 };
368 enum { e_IS_VARARG = 0 };
369 typedef t_BSLMF_RETURN ResultType;
370 typedef typename TypeList<t_ARGS_01,
371 t_ARGS_02,
372 t_ARGS_03,
373 t_ARGS_04,
374 t_ARGS_05,
375 t_ARGS_06,
376 t_ARGS_07,
377 t_ARGS_08>::Type ArgumentList;
378 typedef t_BSLMF_RETURN FuncType(t_ARGS_01,
379 t_ARGS_02,
380 t_ARGS_03,
381 t_ARGS_04,
382 t_ARGS_05,
383 t_ARGS_06,
384 t_ARGS_07,
385 t_ARGS_08);
386 typedef FunctionPointerCPlusPlusLinkage Linkage;
387};
388#endif // BSLMF_FUNCTIONPOINTERTRAITS_VARIADIC_LIMIT_A >= 8
389
390#if BSLMF_FUNCTIONPOINTERTRAITS_VARIADIC_LIMIT_A >= 9
391template <class t_BSLMF_RETURN, class t_ARGS_01,
392 class t_ARGS_02,
393 class t_ARGS_03,
394 class t_ARGS_04,
395 class t_ARGS_05,
396 class t_ARGS_06,
397 class t_ARGS_07,
398 class t_ARGS_08,
399 class t_ARGS_09>
400struct FunctionPointerTraits<t_BSLMF_RETURN (*)(t_ARGS_01,
401 t_ARGS_02,
402 t_ARGS_03,
403 t_ARGS_04,
404 t_ARGS_05,
405 t_ARGS_06,
406 t_ARGS_07,
407 t_ARGS_08,
408 t_ARGS_09)> {
409
410 enum {
411 IS_FUNCTION_POINTER = 1,
412 IS_NOEXCEPT = 0
413 };
414 enum { e_IS_VARARG = 0 };
415 typedef t_BSLMF_RETURN ResultType;
416 typedef typename TypeList<t_ARGS_01,
417 t_ARGS_02,
418 t_ARGS_03,
419 t_ARGS_04,
420 t_ARGS_05,
421 t_ARGS_06,
422 t_ARGS_07,
423 t_ARGS_08,
424 t_ARGS_09>::Type ArgumentList;
425 typedef t_BSLMF_RETURN FuncType(t_ARGS_01,
426 t_ARGS_02,
427 t_ARGS_03,
428 t_ARGS_04,
429 t_ARGS_05,
430 t_ARGS_06,
431 t_ARGS_07,
432 t_ARGS_08,
433 t_ARGS_09);
434 typedef FunctionPointerCPlusPlusLinkage Linkage;
435};
436#endif // BSLMF_FUNCTIONPOINTERTRAITS_VARIADIC_LIMIT_A >= 9
437
438#if BSLMF_FUNCTIONPOINTERTRAITS_VARIADIC_LIMIT_A >= 10
439template <class t_BSLMF_RETURN, class t_ARGS_01,
440 class t_ARGS_02,
441 class t_ARGS_03,
442 class t_ARGS_04,
443 class t_ARGS_05,
444 class t_ARGS_06,
445 class t_ARGS_07,
446 class t_ARGS_08,
447 class t_ARGS_09,
448 class t_ARGS_10>
449struct FunctionPointerTraits<t_BSLMF_RETURN (*)(t_ARGS_01,
450 t_ARGS_02,
451 t_ARGS_03,
452 t_ARGS_04,
453 t_ARGS_05,
454 t_ARGS_06,
455 t_ARGS_07,
456 t_ARGS_08,
457 t_ARGS_09,
458 t_ARGS_10)> {
459
460 enum {
461 IS_FUNCTION_POINTER = 1,
462 IS_NOEXCEPT = 0
463 };
464 enum { e_IS_VARARG = 0 };
465 typedef t_BSLMF_RETURN ResultType;
466 typedef typename TypeList<t_ARGS_01,
467 t_ARGS_02,
468 t_ARGS_03,
469 t_ARGS_04,
470 t_ARGS_05,
471 t_ARGS_06,
472 t_ARGS_07,
473 t_ARGS_08,
474 t_ARGS_09,
475 t_ARGS_10>::Type ArgumentList;
476 typedef t_BSLMF_RETURN FuncType(t_ARGS_01,
477 t_ARGS_02,
478 t_ARGS_03,
479 t_ARGS_04,
480 t_ARGS_05,
481 t_ARGS_06,
482 t_ARGS_07,
483 t_ARGS_08,
484 t_ARGS_09,
485 t_ARGS_10);
486 typedef FunctionPointerCPlusPlusLinkage Linkage;
487};
488#endif // BSLMF_FUNCTIONPOINTERTRAITS_VARIADIC_LIMIT_A >= 10
489
490#if BSLMF_FUNCTIONPOINTERTRAITS_VARIADIC_LIMIT_A >= 11
491template <class t_BSLMF_RETURN, class t_ARGS_01,
492 class t_ARGS_02,
493 class t_ARGS_03,
494 class t_ARGS_04,
495 class t_ARGS_05,
496 class t_ARGS_06,
497 class t_ARGS_07,
498 class t_ARGS_08,
499 class t_ARGS_09,
500 class t_ARGS_10,
501 class t_ARGS_11>
502struct FunctionPointerTraits<t_BSLMF_RETURN (*)(t_ARGS_01,
503 t_ARGS_02,
504 t_ARGS_03,
505 t_ARGS_04,
506 t_ARGS_05,
507 t_ARGS_06,
508 t_ARGS_07,
509 t_ARGS_08,
510 t_ARGS_09,
511 t_ARGS_10,
512 t_ARGS_11)> {
513
514 enum {
515 IS_FUNCTION_POINTER = 1,
516 IS_NOEXCEPT = 0
517 };
518 enum { e_IS_VARARG = 0 };
519 typedef t_BSLMF_RETURN ResultType;
520 typedef typename TypeList<t_ARGS_01,
521 t_ARGS_02,
522 t_ARGS_03,
523 t_ARGS_04,
524 t_ARGS_05,
525 t_ARGS_06,
526 t_ARGS_07,
527 t_ARGS_08,
528 t_ARGS_09,
529 t_ARGS_10,
530 t_ARGS_11>::Type ArgumentList;
531 typedef t_BSLMF_RETURN FuncType(t_ARGS_01,
532 t_ARGS_02,
533 t_ARGS_03,
534 t_ARGS_04,
535 t_ARGS_05,
536 t_ARGS_06,
537 t_ARGS_07,
538 t_ARGS_08,
539 t_ARGS_09,
540 t_ARGS_10,
541 t_ARGS_11);
542 typedef FunctionPointerCPlusPlusLinkage Linkage;
543};
544#endif // BSLMF_FUNCTIONPOINTERTRAITS_VARIADIC_LIMIT_A >= 11
545
546#if BSLMF_FUNCTIONPOINTERTRAITS_VARIADIC_LIMIT_A >= 12
547template <class t_BSLMF_RETURN, class t_ARGS_01,
548 class t_ARGS_02,
549 class t_ARGS_03,
550 class t_ARGS_04,
551 class t_ARGS_05,
552 class t_ARGS_06,
553 class t_ARGS_07,
554 class t_ARGS_08,
555 class t_ARGS_09,
556 class t_ARGS_10,
557 class t_ARGS_11,
558 class t_ARGS_12>
559struct FunctionPointerTraits<t_BSLMF_RETURN (*)(t_ARGS_01,
560 t_ARGS_02,
561 t_ARGS_03,
562 t_ARGS_04,
563 t_ARGS_05,
564 t_ARGS_06,
565 t_ARGS_07,
566 t_ARGS_08,
567 t_ARGS_09,
568 t_ARGS_10,
569 t_ARGS_11,
570 t_ARGS_12)> {
571
572 enum {
573 IS_FUNCTION_POINTER = 1,
574 IS_NOEXCEPT = 0
575 };
576 enum { e_IS_VARARG = 0 };
577 typedef t_BSLMF_RETURN ResultType;
578 typedef typename TypeList<t_ARGS_01,
579 t_ARGS_02,
580 t_ARGS_03,
581 t_ARGS_04,
582 t_ARGS_05,
583 t_ARGS_06,
584 t_ARGS_07,
585 t_ARGS_08,
586 t_ARGS_09,
587 t_ARGS_10,
588 t_ARGS_11,
589 t_ARGS_12>::Type ArgumentList;
590 typedef t_BSLMF_RETURN FuncType(t_ARGS_01,
591 t_ARGS_02,
592 t_ARGS_03,
593 t_ARGS_04,
594 t_ARGS_05,
595 t_ARGS_06,
596 t_ARGS_07,
597 t_ARGS_08,
598 t_ARGS_09,
599 t_ARGS_10,
600 t_ARGS_11,
601 t_ARGS_12);
602 typedef FunctionPointerCPlusPlusLinkage Linkage;
603};
604#endif // BSLMF_FUNCTIONPOINTERTRAITS_VARIADIC_LIMIT_A >= 12
605
606#if BSLMF_FUNCTIONPOINTERTRAITS_VARIADIC_LIMIT_A >= 13
607template <class t_BSLMF_RETURN, class t_ARGS_01,
608 class t_ARGS_02,
609 class t_ARGS_03,
610 class t_ARGS_04,
611 class t_ARGS_05,
612 class t_ARGS_06,
613 class t_ARGS_07,
614 class t_ARGS_08,
615 class t_ARGS_09,
616 class t_ARGS_10,
617 class t_ARGS_11,
618 class t_ARGS_12,
619 class t_ARGS_13>
620struct FunctionPointerTraits<t_BSLMF_RETURN (*)(t_ARGS_01,
621 t_ARGS_02,
622 t_ARGS_03,
623 t_ARGS_04,
624 t_ARGS_05,
625 t_ARGS_06,
626 t_ARGS_07,
627 t_ARGS_08,
628 t_ARGS_09,
629 t_ARGS_10,
630 t_ARGS_11,
631 t_ARGS_12,
632 t_ARGS_13)> {
633
634 enum {
635 IS_FUNCTION_POINTER = 1,
636 IS_NOEXCEPT = 0
637 };
638 enum { e_IS_VARARG = 0 };
639 typedef t_BSLMF_RETURN ResultType;
640 typedef typename TypeList<t_ARGS_01,
641 t_ARGS_02,
642 t_ARGS_03,
643 t_ARGS_04,
644 t_ARGS_05,
645 t_ARGS_06,
646 t_ARGS_07,
647 t_ARGS_08,
648 t_ARGS_09,
649 t_ARGS_10,
650 t_ARGS_11,
651 t_ARGS_12,
652 t_ARGS_13>::Type ArgumentList;
653 typedef t_BSLMF_RETURN FuncType(t_ARGS_01,
654 t_ARGS_02,
655 t_ARGS_03,
656 t_ARGS_04,
657 t_ARGS_05,
658 t_ARGS_06,
659 t_ARGS_07,
660 t_ARGS_08,
661 t_ARGS_09,
662 t_ARGS_10,
663 t_ARGS_11,
664 t_ARGS_12,
665 t_ARGS_13);
666 typedef FunctionPointerCPlusPlusLinkage Linkage;
667};
668#endif // BSLMF_FUNCTIONPOINTERTRAITS_VARIADIC_LIMIT_A >= 13
669
670#if BSLMF_FUNCTIONPOINTERTRAITS_VARIADIC_LIMIT_A >= 14
671template <class t_BSLMF_RETURN, class t_ARGS_01,
672 class t_ARGS_02,
673 class t_ARGS_03,
674 class t_ARGS_04,
675 class t_ARGS_05,
676 class t_ARGS_06,
677 class t_ARGS_07,
678 class t_ARGS_08,
679 class t_ARGS_09,
680 class t_ARGS_10,
681 class t_ARGS_11,
682 class t_ARGS_12,
683 class t_ARGS_13,
684 class t_ARGS_14>
685struct FunctionPointerTraits<t_BSLMF_RETURN (*)(t_ARGS_01,
686 t_ARGS_02,
687 t_ARGS_03,
688 t_ARGS_04,
689 t_ARGS_05,
690 t_ARGS_06,
691 t_ARGS_07,
692 t_ARGS_08,
693 t_ARGS_09,
694 t_ARGS_10,
695 t_ARGS_11,
696 t_ARGS_12,
697 t_ARGS_13,
698 t_ARGS_14)> {
699
700 enum {
701 IS_FUNCTION_POINTER = 1,
702 IS_NOEXCEPT = 0
703 };
704 enum { e_IS_VARARG = 0 };
705 typedef t_BSLMF_RETURN ResultType;
706 typedef typename TypeList<t_ARGS_01,
707 t_ARGS_02,
708 t_ARGS_03,
709 t_ARGS_04,
710 t_ARGS_05,
711 t_ARGS_06,
712 t_ARGS_07,
713 t_ARGS_08,
714 t_ARGS_09,
715 t_ARGS_10,
716 t_ARGS_11,
717 t_ARGS_12,
718 t_ARGS_13,
719 t_ARGS_14>::Type ArgumentList;
720 typedef t_BSLMF_RETURN FuncType(t_ARGS_01,
721 t_ARGS_02,
722 t_ARGS_03,
723 t_ARGS_04,
724 t_ARGS_05,
725 t_ARGS_06,
726 t_ARGS_07,
727 t_ARGS_08,
728 t_ARGS_09,
729 t_ARGS_10,
730 t_ARGS_11,
731 t_ARGS_12,
732 t_ARGS_13,
733 t_ARGS_14);
734 typedef FunctionPointerCPlusPlusLinkage Linkage;
735};
736#endif // BSLMF_FUNCTIONPOINTERTRAITS_VARIADIC_LIMIT_A >= 14
737
738
739#if BSLMF_FUNCTIONPOINTERTRAITS_VARIADIC_LIMIT_A >= 0
740template <class t_BSLMF_RETURN>
741struct FunctionPointerTraits<t_BSLMF_RETURN (*)(...)> {
742
743 enum {
744 IS_FUNCTION_POINTER = 1,
745 IS_NOEXCEPT = 0
746 };
747 enum { e_IS_VARARG = 1 };
748 typedef t_BSLMF_RETURN ResultType;
749 typedef typename TypeList<>::Type ArgumentList;
750 typedef t_BSLMF_RETURN FuncType(...);
751 typedef FunctionPointerCPlusPlusLinkage Linkage;
752};
753#endif // BSLMF_FUNCTIONPOINTERTRAITS_VARIADIC_LIMIT_A >= 0
754
755#if BSLMF_FUNCTIONPOINTERTRAITS_VARIADIC_LIMIT_A >= 1
756template <class t_BSLMF_RETURN, class t_ARGS_01>
757struct FunctionPointerTraits<t_BSLMF_RETURN (*)(t_ARGS_01,...)> {
758
759 enum {
760 IS_FUNCTION_POINTER = 1,
761 IS_NOEXCEPT = 0
762 };
763 enum { e_IS_VARARG = 1 };
764 typedef t_BSLMF_RETURN ResultType;
765 typedef typename TypeList<t_ARGS_01>::Type ArgumentList;
766 typedef t_BSLMF_RETURN FuncType(t_ARGS_01,...);
767 typedef FunctionPointerCPlusPlusLinkage Linkage;
768};
769#endif // BSLMF_FUNCTIONPOINTERTRAITS_VARIADIC_LIMIT_A >= 1
770
771#if BSLMF_FUNCTIONPOINTERTRAITS_VARIADIC_LIMIT_A >= 2
772template <class t_BSLMF_RETURN, class t_ARGS_01,
773 class t_ARGS_02>
774struct FunctionPointerTraits<t_BSLMF_RETURN (*)(t_ARGS_01,
775 t_ARGS_02,...)> {
776
777 enum {
778 IS_FUNCTION_POINTER = 1,
779 IS_NOEXCEPT = 0
780 };
781 enum { e_IS_VARARG = 1 };
782 typedef t_BSLMF_RETURN ResultType;
783 typedef typename TypeList<t_ARGS_01,
784 t_ARGS_02>::Type ArgumentList;
785 typedef t_BSLMF_RETURN FuncType(t_ARGS_01,
786 t_ARGS_02,...);
787 typedef FunctionPointerCPlusPlusLinkage Linkage;
788};
789#endif // BSLMF_FUNCTIONPOINTERTRAITS_VARIADIC_LIMIT_A >= 2
790
791#if BSLMF_FUNCTIONPOINTERTRAITS_VARIADIC_LIMIT_A >= 3
792template <class t_BSLMF_RETURN, class t_ARGS_01,
793 class t_ARGS_02,
794 class t_ARGS_03>
795struct FunctionPointerTraits<t_BSLMF_RETURN (*)(t_ARGS_01,
796 t_ARGS_02,
797 t_ARGS_03,...)> {
798
799 enum {
800 IS_FUNCTION_POINTER = 1,
801 IS_NOEXCEPT = 0
802 };
803 enum { e_IS_VARARG = 1 };
804 typedef t_BSLMF_RETURN ResultType;
805 typedef typename TypeList<t_ARGS_01,
806 t_ARGS_02,
807 t_ARGS_03>::Type ArgumentList;
808 typedef t_BSLMF_RETURN FuncType(t_ARGS_01,
809 t_ARGS_02,
810 t_ARGS_03,...);
811 typedef FunctionPointerCPlusPlusLinkage Linkage;
812};
813#endif // BSLMF_FUNCTIONPOINTERTRAITS_VARIADIC_LIMIT_A >= 3
814
815#if BSLMF_FUNCTIONPOINTERTRAITS_VARIADIC_LIMIT_A >= 4
816template <class t_BSLMF_RETURN, class t_ARGS_01,
817 class t_ARGS_02,
818 class t_ARGS_03,
819 class t_ARGS_04>
820struct FunctionPointerTraits<t_BSLMF_RETURN (*)(t_ARGS_01,
821 t_ARGS_02,
822 t_ARGS_03,
823 t_ARGS_04,...)> {
824
825 enum {
826 IS_FUNCTION_POINTER = 1,
827 IS_NOEXCEPT = 0
828 };
829 enum { e_IS_VARARG = 1 };
830 typedef t_BSLMF_RETURN ResultType;
831 typedef typename TypeList<t_ARGS_01,
832 t_ARGS_02,
833 t_ARGS_03,
834 t_ARGS_04>::Type ArgumentList;
835 typedef t_BSLMF_RETURN FuncType(t_ARGS_01,
836 t_ARGS_02,
837 t_ARGS_03,
838 t_ARGS_04,...);
839 typedef FunctionPointerCPlusPlusLinkage Linkage;
840};
841#endif // BSLMF_FUNCTIONPOINTERTRAITS_VARIADIC_LIMIT_A >= 4
842
843#if BSLMF_FUNCTIONPOINTERTRAITS_VARIADIC_LIMIT_A >= 5
844template <class t_BSLMF_RETURN, class t_ARGS_01,
845 class t_ARGS_02,
846 class t_ARGS_03,
847 class t_ARGS_04,
848 class t_ARGS_05>
849struct FunctionPointerTraits<t_BSLMF_RETURN (*)(t_ARGS_01,
850 t_ARGS_02,
851 t_ARGS_03,
852 t_ARGS_04,
853 t_ARGS_05,...)> {
854
855 enum {
856 IS_FUNCTION_POINTER = 1,
857 IS_NOEXCEPT = 0
858 };
859 enum { e_IS_VARARG = 1 };
860 typedef t_BSLMF_RETURN ResultType;
861 typedef typename TypeList<t_ARGS_01,
862 t_ARGS_02,
863 t_ARGS_03,
864 t_ARGS_04,
865 t_ARGS_05>::Type ArgumentList;
866 typedef t_BSLMF_RETURN FuncType(t_ARGS_01,
867 t_ARGS_02,
868 t_ARGS_03,
869 t_ARGS_04,
870 t_ARGS_05,...);
871 typedef FunctionPointerCPlusPlusLinkage Linkage;
872};
873#endif // BSLMF_FUNCTIONPOINTERTRAITS_VARIADIC_LIMIT_A >= 5
874
875#if BSLMF_FUNCTIONPOINTERTRAITS_VARIADIC_LIMIT_A >= 6
876template <class t_BSLMF_RETURN, class t_ARGS_01,
877 class t_ARGS_02,
878 class t_ARGS_03,
879 class t_ARGS_04,
880 class t_ARGS_05,
881 class t_ARGS_06>
882struct FunctionPointerTraits<t_BSLMF_RETURN (*)(t_ARGS_01,
883 t_ARGS_02,
884 t_ARGS_03,
885 t_ARGS_04,
886 t_ARGS_05,
887 t_ARGS_06,...)> {
888
889 enum {
890 IS_FUNCTION_POINTER = 1,
891 IS_NOEXCEPT = 0
892 };
893 enum { e_IS_VARARG = 1 };
894 typedef t_BSLMF_RETURN ResultType;
895 typedef typename TypeList<t_ARGS_01,
896 t_ARGS_02,
897 t_ARGS_03,
898 t_ARGS_04,
899 t_ARGS_05,
900 t_ARGS_06>::Type ArgumentList;
901 typedef t_BSLMF_RETURN FuncType(t_ARGS_01,
902 t_ARGS_02,
903 t_ARGS_03,
904 t_ARGS_04,
905 t_ARGS_05,
906 t_ARGS_06,...);
907 typedef FunctionPointerCPlusPlusLinkage Linkage;
908};
909#endif // BSLMF_FUNCTIONPOINTERTRAITS_VARIADIC_LIMIT_A >= 6
910
911#if BSLMF_FUNCTIONPOINTERTRAITS_VARIADIC_LIMIT_A >= 7
912template <class t_BSLMF_RETURN, class t_ARGS_01,
913 class t_ARGS_02,
914 class t_ARGS_03,
915 class t_ARGS_04,
916 class t_ARGS_05,
917 class t_ARGS_06,
918 class t_ARGS_07>
919struct FunctionPointerTraits<t_BSLMF_RETURN (*)(t_ARGS_01,
920 t_ARGS_02,
921 t_ARGS_03,
922 t_ARGS_04,
923 t_ARGS_05,
924 t_ARGS_06,
925 t_ARGS_07,...)> {
926
927 enum {
928 IS_FUNCTION_POINTER = 1,
929 IS_NOEXCEPT = 0
930 };
931 enum { e_IS_VARARG = 1 };
932 typedef t_BSLMF_RETURN ResultType;
933 typedef typename TypeList<t_ARGS_01,
934 t_ARGS_02,
935 t_ARGS_03,
936 t_ARGS_04,
937 t_ARGS_05,
938 t_ARGS_06,
939 t_ARGS_07>::Type ArgumentList;
940 typedef t_BSLMF_RETURN FuncType(t_ARGS_01,
941 t_ARGS_02,
942 t_ARGS_03,
943 t_ARGS_04,
944 t_ARGS_05,
945 t_ARGS_06,
946 t_ARGS_07,...);
947 typedef FunctionPointerCPlusPlusLinkage Linkage;
948};
949#endif // BSLMF_FUNCTIONPOINTERTRAITS_VARIADIC_LIMIT_A >= 7
950
951#if BSLMF_FUNCTIONPOINTERTRAITS_VARIADIC_LIMIT_A >= 8
952template <class t_BSLMF_RETURN, class t_ARGS_01,
953 class t_ARGS_02,
954 class t_ARGS_03,
955 class t_ARGS_04,
956 class t_ARGS_05,
957 class t_ARGS_06,
958 class t_ARGS_07,
959 class t_ARGS_08>
960struct FunctionPointerTraits<t_BSLMF_RETURN (*)(t_ARGS_01,
961 t_ARGS_02,
962 t_ARGS_03,
963 t_ARGS_04,
964 t_ARGS_05,
965 t_ARGS_06,
966 t_ARGS_07,
967 t_ARGS_08,...)> {
968
969 enum {
970 IS_FUNCTION_POINTER = 1,
971 IS_NOEXCEPT = 0
972 };
973 enum { e_IS_VARARG = 1 };
974 typedef t_BSLMF_RETURN ResultType;
975 typedef typename TypeList<t_ARGS_01,
976 t_ARGS_02,
977 t_ARGS_03,
978 t_ARGS_04,
979 t_ARGS_05,
980 t_ARGS_06,
981 t_ARGS_07,
982 t_ARGS_08>::Type ArgumentList;
983 typedef t_BSLMF_RETURN FuncType(t_ARGS_01,
984 t_ARGS_02,
985 t_ARGS_03,
986 t_ARGS_04,
987 t_ARGS_05,
988 t_ARGS_06,
989 t_ARGS_07,
990 t_ARGS_08,...);
991 typedef FunctionPointerCPlusPlusLinkage Linkage;
992};
993#endif // BSLMF_FUNCTIONPOINTERTRAITS_VARIADIC_LIMIT_A >= 8
994
995#if BSLMF_FUNCTIONPOINTERTRAITS_VARIADIC_LIMIT_A >= 9
996template <class t_BSLMF_RETURN, class t_ARGS_01,
997 class t_ARGS_02,
998 class t_ARGS_03,
999 class t_ARGS_04,
1000 class t_ARGS_05,
1001 class t_ARGS_06,
1002 class t_ARGS_07,
1003 class t_ARGS_08,
1004 class t_ARGS_09>
1005struct FunctionPointerTraits<t_BSLMF_RETURN (*)(t_ARGS_01,
1006 t_ARGS_02,
1007 t_ARGS_03,
1008 t_ARGS_04,
1009 t_ARGS_05,
1010 t_ARGS_06,
1011 t_ARGS_07,
1012 t_ARGS_08,
1013 t_ARGS_09,...)> {
1014
1015 enum {
1016 IS_FUNCTION_POINTER = 1,
1017 IS_NOEXCEPT = 0
1018 };
1019 enum { e_IS_VARARG = 1 };
1020 typedef t_BSLMF_RETURN ResultType;
1021 typedef typename TypeList<t_ARGS_01,
1022 t_ARGS_02,
1023 t_ARGS_03,
1024 t_ARGS_04,
1025 t_ARGS_05,
1026 t_ARGS_06,
1027 t_ARGS_07,
1028 t_ARGS_08,
1029 t_ARGS_09>::Type ArgumentList;
1030 typedef t_BSLMF_RETURN FuncType(t_ARGS_01,
1031 t_ARGS_02,
1032 t_ARGS_03,
1033 t_ARGS_04,
1034 t_ARGS_05,
1035 t_ARGS_06,
1036 t_ARGS_07,
1037 t_ARGS_08,
1038 t_ARGS_09,...);
1039 typedef FunctionPointerCPlusPlusLinkage Linkage;
1040};
1041#endif // BSLMF_FUNCTIONPOINTERTRAITS_VARIADIC_LIMIT_A >= 9
1042
1043#if BSLMF_FUNCTIONPOINTERTRAITS_VARIADIC_LIMIT_A >= 10
1044template <class t_BSLMF_RETURN, class t_ARGS_01,
1045 class t_ARGS_02,
1046 class t_ARGS_03,
1047 class t_ARGS_04,
1048 class t_ARGS_05,
1049 class t_ARGS_06,
1050 class t_ARGS_07,
1051 class t_ARGS_08,
1052 class t_ARGS_09,
1053 class t_ARGS_10>
1054struct FunctionPointerTraits<t_BSLMF_RETURN (*)(t_ARGS_01,
1055 t_ARGS_02,
1056 t_ARGS_03,
1057 t_ARGS_04,
1058 t_ARGS_05,
1059 t_ARGS_06,
1060 t_ARGS_07,
1061 t_ARGS_08,
1062 t_ARGS_09,
1063 t_ARGS_10,...)> {
1064
1065 enum {
1066 IS_FUNCTION_POINTER = 1,
1067 IS_NOEXCEPT = 0
1068 };
1069 enum { e_IS_VARARG = 1 };
1070 typedef t_BSLMF_RETURN ResultType;
1071 typedef typename TypeList<t_ARGS_01,
1072 t_ARGS_02,
1073 t_ARGS_03,
1074 t_ARGS_04,
1075 t_ARGS_05,
1076 t_ARGS_06,
1077 t_ARGS_07,
1078 t_ARGS_08,
1079 t_ARGS_09,
1080 t_ARGS_10>::Type ArgumentList;
1081 typedef t_BSLMF_RETURN FuncType(t_ARGS_01,
1082 t_ARGS_02,
1083 t_ARGS_03,
1084 t_ARGS_04,
1085 t_ARGS_05,
1086 t_ARGS_06,
1087 t_ARGS_07,
1088 t_ARGS_08,
1089 t_ARGS_09,
1090 t_ARGS_10,...);
1091 typedef FunctionPointerCPlusPlusLinkage Linkage;
1092};
1093#endif // BSLMF_FUNCTIONPOINTERTRAITS_VARIADIC_LIMIT_A >= 10
1094
1095#if BSLMF_FUNCTIONPOINTERTRAITS_VARIADIC_LIMIT_A >= 11
1096template <class t_BSLMF_RETURN, class t_ARGS_01,
1097 class t_ARGS_02,
1098 class t_ARGS_03,
1099 class t_ARGS_04,
1100 class t_ARGS_05,
1101 class t_ARGS_06,
1102 class t_ARGS_07,
1103 class t_ARGS_08,
1104 class t_ARGS_09,
1105 class t_ARGS_10,
1106 class t_ARGS_11>
1107struct FunctionPointerTraits<t_BSLMF_RETURN (*)(t_ARGS_01,
1108 t_ARGS_02,
1109 t_ARGS_03,
1110 t_ARGS_04,
1111 t_ARGS_05,
1112 t_ARGS_06,
1113 t_ARGS_07,
1114 t_ARGS_08,
1115 t_ARGS_09,
1116 t_ARGS_10,
1117 t_ARGS_11,...)> {
1118
1119 enum {
1120 IS_FUNCTION_POINTER = 1,
1121 IS_NOEXCEPT = 0
1122 };
1123 enum { e_IS_VARARG = 1 };
1124 typedef t_BSLMF_RETURN ResultType;
1125 typedef typename TypeList<t_ARGS_01,
1126 t_ARGS_02,
1127 t_ARGS_03,
1128 t_ARGS_04,
1129 t_ARGS_05,
1130 t_ARGS_06,
1131 t_ARGS_07,
1132 t_ARGS_08,
1133 t_ARGS_09,
1134 t_ARGS_10,
1135 t_ARGS_11>::Type ArgumentList;
1136 typedef t_BSLMF_RETURN FuncType(t_ARGS_01,
1137 t_ARGS_02,
1138 t_ARGS_03,
1139 t_ARGS_04,
1140 t_ARGS_05,
1141 t_ARGS_06,
1142 t_ARGS_07,
1143 t_ARGS_08,
1144 t_ARGS_09,
1145 t_ARGS_10,
1146 t_ARGS_11,...);
1147 typedef FunctionPointerCPlusPlusLinkage Linkage;
1148};
1149#endif // BSLMF_FUNCTIONPOINTERTRAITS_VARIADIC_LIMIT_A >= 11
1150
1151#if BSLMF_FUNCTIONPOINTERTRAITS_VARIADIC_LIMIT_A >= 12
1152template <class t_BSLMF_RETURN, class t_ARGS_01,
1153 class t_ARGS_02,
1154 class t_ARGS_03,
1155 class t_ARGS_04,
1156 class t_ARGS_05,
1157 class t_ARGS_06,
1158 class t_ARGS_07,
1159 class t_ARGS_08,
1160 class t_ARGS_09,
1161 class t_ARGS_10,
1162 class t_ARGS_11,
1163 class t_ARGS_12>
1164struct FunctionPointerTraits<t_BSLMF_RETURN (*)(t_ARGS_01,
1165 t_ARGS_02,
1166 t_ARGS_03,
1167 t_ARGS_04,
1168 t_ARGS_05,
1169 t_ARGS_06,
1170 t_ARGS_07,
1171 t_ARGS_08,
1172 t_ARGS_09,
1173 t_ARGS_10,
1174 t_ARGS_11,
1175 t_ARGS_12,...)> {
1176
1177 enum {
1178 IS_FUNCTION_POINTER = 1,
1179 IS_NOEXCEPT = 0
1180 };
1181 enum { e_IS_VARARG = 1 };
1182 typedef t_BSLMF_RETURN ResultType;
1183 typedef typename TypeList<t_ARGS_01,
1184 t_ARGS_02,
1185 t_ARGS_03,
1186 t_ARGS_04,
1187 t_ARGS_05,
1188 t_ARGS_06,
1189 t_ARGS_07,
1190 t_ARGS_08,
1191 t_ARGS_09,
1192 t_ARGS_10,
1193 t_ARGS_11,
1194 t_ARGS_12>::Type ArgumentList;
1195 typedef t_BSLMF_RETURN FuncType(t_ARGS_01,
1196 t_ARGS_02,
1197 t_ARGS_03,
1198 t_ARGS_04,
1199 t_ARGS_05,
1200 t_ARGS_06,
1201 t_ARGS_07,
1202 t_ARGS_08,
1203 t_ARGS_09,
1204 t_ARGS_10,
1205 t_ARGS_11,
1206 t_ARGS_12,...);
1207 typedef FunctionPointerCPlusPlusLinkage Linkage;
1208};
1209#endif // BSLMF_FUNCTIONPOINTERTRAITS_VARIADIC_LIMIT_A >= 12
1210
1211#if BSLMF_FUNCTIONPOINTERTRAITS_VARIADIC_LIMIT_A >= 13
1212template <class t_BSLMF_RETURN, class t_ARGS_01,
1213 class t_ARGS_02,
1214 class t_ARGS_03,
1215 class t_ARGS_04,
1216 class t_ARGS_05,
1217 class t_ARGS_06,
1218 class t_ARGS_07,
1219 class t_ARGS_08,
1220 class t_ARGS_09,
1221 class t_ARGS_10,
1222 class t_ARGS_11,
1223 class t_ARGS_12,
1224 class t_ARGS_13>
1225struct FunctionPointerTraits<t_BSLMF_RETURN (*)(t_ARGS_01,
1226 t_ARGS_02,
1227 t_ARGS_03,
1228 t_ARGS_04,
1229 t_ARGS_05,
1230 t_ARGS_06,
1231 t_ARGS_07,
1232 t_ARGS_08,
1233 t_ARGS_09,
1234 t_ARGS_10,
1235 t_ARGS_11,
1236 t_ARGS_12,
1237 t_ARGS_13,...)> {
1238
1239 enum {
1240 IS_FUNCTION_POINTER = 1,
1241 IS_NOEXCEPT = 0
1242 };
1243 enum { e_IS_VARARG = 1 };
1244 typedef t_BSLMF_RETURN ResultType;
1245 typedef typename TypeList<t_ARGS_01,
1246 t_ARGS_02,
1247 t_ARGS_03,
1248 t_ARGS_04,
1249 t_ARGS_05,
1250 t_ARGS_06,
1251 t_ARGS_07,
1252 t_ARGS_08,
1253 t_ARGS_09,
1254 t_ARGS_10,
1255 t_ARGS_11,
1256 t_ARGS_12,
1257 t_ARGS_13>::Type ArgumentList;
1258 typedef t_BSLMF_RETURN FuncType(t_ARGS_01,
1259 t_ARGS_02,
1260 t_ARGS_03,
1261 t_ARGS_04,
1262 t_ARGS_05,
1263 t_ARGS_06,
1264 t_ARGS_07,
1265 t_ARGS_08,
1266 t_ARGS_09,
1267 t_ARGS_10,
1268 t_ARGS_11,
1269 t_ARGS_12,
1270 t_ARGS_13,...);
1271 typedef FunctionPointerCPlusPlusLinkage Linkage;
1272};
1273#endif // BSLMF_FUNCTIONPOINTERTRAITS_VARIADIC_LIMIT_A >= 13
1274
1275#if BSLMF_FUNCTIONPOINTERTRAITS_VARIADIC_LIMIT_A >= 14
1276template <class t_BSLMF_RETURN, class t_ARGS_01,
1277 class t_ARGS_02,
1278 class t_ARGS_03,
1279 class t_ARGS_04,
1280 class t_ARGS_05,
1281 class t_ARGS_06,
1282 class t_ARGS_07,
1283 class t_ARGS_08,
1284 class t_ARGS_09,
1285 class t_ARGS_10,
1286 class t_ARGS_11,
1287 class t_ARGS_12,
1288 class t_ARGS_13,
1289 class t_ARGS_14>
1290struct FunctionPointerTraits<t_BSLMF_RETURN (*)(t_ARGS_01,
1291 t_ARGS_02,
1292 t_ARGS_03,
1293 t_ARGS_04,
1294 t_ARGS_05,
1295 t_ARGS_06,
1296 t_ARGS_07,
1297 t_ARGS_08,
1298 t_ARGS_09,
1299 t_ARGS_10,
1300 t_ARGS_11,
1301 t_ARGS_12,
1302 t_ARGS_13,
1303 t_ARGS_14,...)> {
1304
1305 enum {
1306 IS_FUNCTION_POINTER = 1,
1307 IS_NOEXCEPT = 0
1308 };
1309 enum { e_IS_VARARG = 1 };
1310 typedef t_BSLMF_RETURN ResultType;
1311 typedef typename TypeList<t_ARGS_01,
1312 t_ARGS_02,
1313 t_ARGS_03,
1314 t_ARGS_04,
1315 t_ARGS_05,
1316 t_ARGS_06,
1317 t_ARGS_07,
1318 t_ARGS_08,
1319 t_ARGS_09,
1320 t_ARGS_10,
1321 t_ARGS_11,
1322 t_ARGS_12,
1323 t_ARGS_13,
1324 t_ARGS_14>::Type ArgumentList;
1325 typedef t_BSLMF_RETURN FuncType(t_ARGS_01,
1326 t_ARGS_02,
1327 t_ARGS_03,
1328 t_ARGS_04,
1329 t_ARGS_05,
1330 t_ARGS_06,
1331 t_ARGS_07,
1332 t_ARGS_08,
1333 t_ARGS_09,
1334 t_ARGS_10,
1335 t_ARGS_11,
1336 t_ARGS_12,
1337 t_ARGS_13,
1338 t_ARGS_14,...);
1339 typedef FunctionPointerCPlusPlusLinkage Linkage;
1340};
1341#endif // BSLMF_FUNCTIONPOINTERTRAITS_VARIADIC_LIMIT_A >= 14
1342
1343
1344#if defined(BSLS_PLATFORM_CMP_CLANG)
1345#pragma clang diagnostic pop
1346#endif
1347#else
1348// The generated code below is a workaround for the absence of perfect
1349// forwarding in some compilers.
1350
1351#if defined(BSLS_PLATFORM_CMP_CLANG) && (!defined(BSLS_PLATFORM_OS_DARWIN) \
1352 || BSLS_PLATFORM_CMP_VER_MAJOR > 130000)
1353#pragma clang diagnostic push
1354#pragma clang diagnostic ignored "-Wdeprecated-volatile"
1355#endif
1356
1357template <class t_BSLMF_RETURN, class... t_ARGS>
1358struct FunctionPointerTraits<t_BSLMF_RETURN (*)(t_ARGS...)> {
1359
1360 enum {
1361 IS_FUNCTION_POINTER = 1,
1362 IS_NOEXCEPT = 0
1363 };
1364 enum { e_IS_VARARG = 0 };
1365 typedef t_BSLMF_RETURN ResultType;
1366 typedef typename TypeList<t_ARGS...>::Type ArgumentList;
1367 typedef t_BSLMF_RETURN FuncType(t_ARGS...);
1368 typedef FunctionPointerCPlusPlusLinkage Linkage;
1369};
1370
1371template <class t_BSLMF_RETURN, class... t_ARGS>
1372struct FunctionPointerTraits<t_BSLMF_RETURN (*)(t_ARGS...,...)> {
1373
1374 enum {
1375 IS_FUNCTION_POINTER = 1,
1376 IS_NOEXCEPT = 0
1377 };
1378 enum { e_IS_VARARG = 1 };
1379 typedef t_BSLMF_RETURN ResultType;
1380 typedef typename TypeList<t_ARGS...>::Type ArgumentList;
1381 typedef t_BSLMF_RETURN FuncType(t_ARGS...,...);
1382 typedef FunctionPointerCPlusPlusLinkage Linkage;
1383};
1384
1385#if defined(BSLS_PLATFORM_CMP_CLANG)
1386#pragma clang diagnostic pop
1387#endif
1388
1389// }}} END GENERATED CODE
1390#endif
1391
1392#if defined(BSLS_PLATFORM_CMP_MSVC)
1393// Microsoft Visual C++ has a problem matching 'T * const' pointers to the
1394// appropriate partial specialization, whereas it will match a 'T const'
1395// specialization. We could use the Microsoft fix on all platforms, but why
1396// instantiate more traits than necessary when testing pointer traits of
1397// cv-qualified types that are not function pointers?
1398
1399template <class t_PROTOTYPE>
1400struct FunctionPointerTraits<t_PROTOTYPE const>
1401: FunctionPointerTraits<t_PROTOTYPE> {
1402 // This class gives information about the specified 't_PROTOTYPE'. The
1403 // general definition gives no information, but specializations for
1404 // function pointers types define nested types 'ResultType',
1405 // 'ArgumentList', and 'Linkage'.
1406};
1407
1408template <class t_PROTOTYPE>
1409struct FunctionPointerTraits<t_PROTOTYPE volatile>
1410: FunctionPointerTraits<t_PROTOTYPE> {
1411 // This class gives information about the specified 't_PROTOTYPE'. The
1412 // general definition gives no information, but specializations for
1413 // function pointers types define nested types 'ResultType',
1414 // 'ArgumentList', and 'Linkage'.
1415};
1416
1417template <class t_PROTOTYPE>
1418struct FunctionPointerTraits<t_PROTOTYPE const volatile>
1419: FunctionPointerTraits<t_PROTOTYPE> {
1420 // This class gives information about the specified 't_PROTOTYPE'. The
1421 // general definition gives no information, but specializations for
1422 // function pointers types define nested types 'ResultType',
1423 // 'ArgumentList', and 'Linkage'.
1424};
1425#else
1426/// This class gives information about the specified `t_PROTOTYPE`. The
1427/// general definition gives no information, but specializations for
1428/// function pointers types define nested types `ResultType`,
1429/// `ArgumentList`, and `Linkage`.
1430template <class t_PROTOTYPE>
1431struct FunctionPointerTraits<t_PROTOTYPE *const>
1432: FunctionPointerTraits<t_PROTOTYPE *> {
1433};
1434
1435/// This class gives information about the specified `t_PROTOTYPE`. The
1436/// general definition gives no information, but specializations for
1437/// function pointers types define nested types `ResultType`,
1438/// `ArgumentList`, and `Linkage`.
1439template <class t_PROTOTYPE>
1440struct FunctionPointerTraits<t_PROTOTYPE *volatile>
1441: FunctionPointerTraits<t_PROTOTYPE *> {
1442};
1443
1444/// This class gives information about the specified `t_PROTOTYPE`. The
1445/// general definition gives no information, but specializations for
1446/// function pointers types define nested types `ResultType`,
1447/// `ArgumentList`, and `Linkage`.
1448template <class t_PROTOTYPE>
1449struct FunctionPointerTraits<t_PROTOTYPE *const volatile>
1450: FunctionPointerTraits<t_PROTOTYPE *> {
1451};
1452// }}} END GENERATED CODE
1453#endif
1454
1455#ifdef BSLS_COMPILERFEATURES_SUPPORT_NOEXCEPT_TYPES
1456
1457#if defined(BSLS_PLATFORM_CMP_CLANG)
1458#pragma clang diagnostic push
1459#pragma clang diagnostic ignored "-Wdeprecated-volatile"
1460#endif
1461
1462/// Specialization for `noexcept` function pointers that return
1463/// `t_BSLMF_RETURN` and accept a fixed number of arguments
1464template <class t_BSLMF_RETURN, class... t_ARGS>
1465struct FunctionPointerTraits<t_BSLMF_RETURN (*)(t_ARGS...) noexcept> {
1466
1467 enum {
1468 IS_FUNCTION_POINTER = 1,
1469 IS_NOEXCEPT = 1
1470 };
1471 enum { e_IS_VARARG = 0 };
1472 typedef t_BSLMF_RETURN ResultType;
1473 typedef typename TypeList<t_ARGS...>::Type ArgumentList;
1474 typedef t_BSLMF_RETURN FuncType(t_ARGS...) noexcept;
1475 typedef FunctionPointerCPlusPlusLinkage Linkage;
1476};
1477
1478/// Specialization for `noexcept` function pointers that return
1479/// `t_BSLMF_RETURN` and accept variable (C-style varargs) number of
1480/// arguments
1481template <class t_BSLMF_RETURN, class... t_ARGS>
1482struct FunctionPointerTraits<t_BSLMF_RETURN (*)(t_ARGS...,...) noexcept> {
1483
1484 enum {
1485 IS_FUNCTION_POINTER = 1,
1486 IS_NOEXCEPT = 1
1487 };
1488 enum { e_IS_VARARG = 1 };
1489 typedef t_BSLMF_RETURN ResultType;
1490 typedef typename TypeList<t_ARGS...>::Type ArgumentList;
1491 typedef t_BSLMF_RETURN FuncType(t_ARGS...,...) noexcept;
1492 typedef FunctionPointerCPlusPlusLinkage Linkage;
1493};
1494
1495#if defined(BSLS_PLATFORM_CMP_CLANG)
1496#pragma clang diagnostic pop
1497#endif
1498
1499#endif // BSLS_COMPILERFEATURES_SUPPORT_NOEXCEPT_TYPES
1500
1501} // close package namespace
1502
1503#ifndef BDE_OPENSOURCE_PUBLICATION // BACKWARD_COMPATIBILITY
1504// ============================================================================
1505// BACKWARD COMPATIBILITY
1506// ============================================================================
1507
1508/// This alias is defined for backward compatibility.
1511
1512/// This alias is defined for backward compatibility.
1514
1515#ifdef bslmf_FunctionPointerTraits
1516#undef bslmf_FunctionPointerTraits
1517#endif
1518/// This alias is defined for backward compatibility.
1519#define bslmf_FunctionPointerTraits bslmf::FunctionPointerTraits
1520
1521#ifdef bslmf_IsFunctionPointer
1522#undef bslmf_IsFunctionPointer
1523#endif
1524/// This alias is defined for backward compatibility.
1525#define bslmf_IsFunctionPointer bslmf::IsFunctionPointer
1526#endif // BDE_OPENSOURCE_PUBLICATION -- BACKWARD_COMPATIBILITY
1527
1528
1529
1530#else // if ! defined(DEFINED_BSLMF_FUNCTIONPOINTERTRAITS_H)
1531# error Not valid except when included from bslmf_functionpointertraits.h
1532#endif // ! defined(COMPILING_BSLMF_FUNCTIONPOINTERTRAITS_H)
1533
1534#endif // ! defined(INCLUDED_BSLMF_FUNCTIONPOINTERTRAITS_CPP03)
1535
1536// ----------------------------------------------------------------------------
1537// Copyright 2013 Bloomberg Finance L.P.
1538//
1539// Licensed under the Apache License, Version 2.0 (the "License");
1540// you may not use this file except in compliance with the License.
1541// You may obtain a copy of the License at
1542//
1543// http://www.apache.org/licenses/LICENSE-2.0
1544//
1545// Unless required by applicable law or agreed to in writing, software
1546// distributed under the License is distributed on an "AS IS" BASIS,
1547// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1548// See the License for the specific language governing permissions and
1549// limitations under the License.
1550// ----------------------------- END-OF-FILE ----------------------------------
1551
1552/** @} */
1553/** @} */
1554/** @} */
bslmf::FunctionPointerCLinkage bslmf_FunctionPointerCLinkage
This alias is defined for backward compatibility.
Definition bslmf_functionpointertraits.h:339
bslmf::FunctionPointerCPlusPlusLinkage bslmf_FunctionPointerCPlusPlusLinkage
This alias is defined for backward compatibility.
Definition bslmf_functionpointertraits.h:336
Definition bdlbb_blob.h:576
Definition bslmf_integralconstant.h:244
C function pointer linkage tag.
Definition bslmf_functionpointertraits.h:125
C++ function pointer linkage tag.
Definition bslmf_functionpointertraits.h:121
@ IS_FUNCTION_POINTER
Definition bslmf_functionpointertraits.h:139
ListType Type
Definition bslmf_typelist.h:2470