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