11#ifndef INCLUDED_BSLMF_FUNCTIONPOINTERTRAITS_CPP03
12#define INCLUDED_BSLMF_FUNCTIONPOINTERTRAITS_CPP03
63#ifdef COMPILING_BSLMF_FUNCTIONPOINTERTRAITS_H
69struct FunctionPointerCPlusPlusLinkage {
73struct FunctionPointerCLinkage {
84template <
class t_PROTOTYPE>
85struct FunctionPointerTraits {
97template <
class t_PROTOTYPE>
98struct IsFunctionPointer
101 FunctionPointerTraits<t_PROTOTYPE>::IS_FUNCTION_POINTER> {
106#if defined(BSLS_COMPILERFEATURES_SUPPORT_NOEXCEPT_TYPES) && \
107 !defined(BSLS_COMPILERFEATURES_SUPPORT_VARIADIC_TEMPLATES)
111# error Feature not supported for compilers without variadic templates
118#if BSLS_COMPILERFEATURES_SIMULATE_VARIADIC_TEMPLATES
121#ifndef BSLMF_FUNCTIONPOINTERTRAITS_VARIADIC_LIMIT
122#define BSLMF_FUNCTIONPOINTERTRAITS_VARIADIC_LIMIT 14
124#ifndef BSLMF_FUNCTIONPOINTERTRAITS_VARIADIC_LIMIT_A
125#define BSLMF_FUNCTIONPOINTERTRAITS_VARIADIC_LIMIT_A BSLMF_FUNCTIONPOINTERTRAITS_VARIADIC_LIMIT
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"
134#if BSLMF_FUNCTIONPOINTERTRAITS_VARIADIC_LIMIT_A >= 0
135template <
class t_BSLMF_RETURN>
136struct FunctionPointerTraits<t_BSLMF_RETURN (*)()> {
139 IS_FUNCTION_POINTER = 1,
142 enum { e_IS_VARARG = 0 };
143 typedef t_BSLMF_RETURN ResultType;
145 typedef t_BSLMF_RETURN FuncType();
146 typedef FunctionPointerCPlusPlusLinkage Linkage;
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)> {
155 IS_FUNCTION_POINTER = 1,
158 enum { e_IS_VARARG = 0 };
159 typedef t_BSLMF_RETURN ResultType;
161 typedef t_BSLMF_RETURN FuncType(t_ARGS_01);
162 typedef FunctionPointerCPlusPlusLinkage Linkage;
166#if BSLMF_FUNCTIONPOINTERTRAITS_VARIADIC_LIMIT_A >= 2
167template <
class t_BSLMF_RETURN,
class t_ARGS_01,
169struct FunctionPointerTraits<t_BSLMF_RETURN (*)(t_ARGS_01,
173 IS_FUNCTION_POINTER = 1,
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,
182 typedef FunctionPointerCPlusPlusLinkage Linkage;
186#if BSLMF_FUNCTIONPOINTERTRAITS_VARIADIC_LIMIT_A >= 3
187template <
class t_BSLMF_RETURN,
class t_ARGS_01,
190struct FunctionPointerTraits<t_BSLMF_RETURN (*)(t_ARGS_01,
195 IS_FUNCTION_POINTER = 1,
198 enum { e_IS_VARARG = 0 };
199 typedef t_BSLMF_RETURN ResultType;
200 typedef typename TypeList<t_ARGS_01,
202 t_ARGS_03>::Type ArgumentList;
203 typedef t_BSLMF_RETURN FuncType(t_ARGS_01,
206 typedef FunctionPointerCPlusPlusLinkage Linkage;
210#if BSLMF_FUNCTIONPOINTERTRAITS_VARIADIC_LIMIT_A >= 4
211template <
class t_BSLMF_RETURN,
class t_ARGS_01,
215struct FunctionPointerTraits<t_BSLMF_RETURN (*)(t_ARGS_01,
221 IS_FUNCTION_POINTER = 1,
224 enum { e_IS_VARARG = 0 };
225 typedef t_BSLMF_RETURN ResultType;
226 typedef typename TypeList<t_ARGS_01,
229 t_ARGS_04>::Type ArgumentList;
230 typedef t_BSLMF_RETURN FuncType(t_ARGS_01,
234 typedef FunctionPointerCPlusPlusLinkage Linkage;
238#if BSLMF_FUNCTIONPOINTERTRAITS_VARIADIC_LIMIT_A >= 5
239template <
class t_BSLMF_RETURN,
class t_ARGS_01,
244struct FunctionPointerTraits<t_BSLMF_RETURN (*)(t_ARGS_01,
251 IS_FUNCTION_POINTER = 1,
254 enum { e_IS_VARARG = 0 };
255 typedef t_BSLMF_RETURN ResultType;
256 typedef typename TypeList<t_ARGS_01,
260 t_ARGS_05>::Type ArgumentList;
261 typedef t_BSLMF_RETURN FuncType(t_ARGS_01,
266 typedef FunctionPointerCPlusPlusLinkage Linkage;
270#if BSLMF_FUNCTIONPOINTERTRAITS_VARIADIC_LIMIT_A >= 6
271template <
class t_BSLMF_RETURN,
class t_ARGS_01,
277struct FunctionPointerTraits<t_BSLMF_RETURN (*)(t_ARGS_01,
285 IS_FUNCTION_POINTER = 1,
288 enum { e_IS_VARARG = 0 };
289 typedef t_BSLMF_RETURN ResultType;
290 typedef typename TypeList<t_ARGS_01,
295 t_ARGS_06>::Type ArgumentList;
296 typedef t_BSLMF_RETURN FuncType(t_ARGS_01,
302 typedef FunctionPointerCPlusPlusLinkage Linkage;
306#if BSLMF_FUNCTIONPOINTERTRAITS_VARIADIC_LIMIT_A >= 7
307template <
class t_BSLMF_RETURN,
class t_ARGS_01,
314struct FunctionPointerTraits<t_BSLMF_RETURN (*)(t_ARGS_01,
323 IS_FUNCTION_POINTER = 1,
326 enum { e_IS_VARARG = 0 };
327 typedef t_BSLMF_RETURN ResultType;
328 typedef typename TypeList<t_ARGS_01,
334 t_ARGS_07>::Type ArgumentList;
335 typedef t_BSLMF_RETURN FuncType(t_ARGS_01,
342 typedef FunctionPointerCPlusPlusLinkage Linkage;
346#if BSLMF_FUNCTIONPOINTERTRAITS_VARIADIC_LIMIT_A >= 8
347template <
class t_BSLMF_RETURN,
class t_ARGS_01,
355struct FunctionPointerTraits<t_BSLMF_RETURN (*)(t_ARGS_01,
365 IS_FUNCTION_POINTER = 1,
368 enum { e_IS_VARARG = 0 };
369 typedef t_BSLMF_RETURN ResultType;
370 typedef typename TypeList<t_ARGS_01,
377 t_ARGS_08>::Type ArgumentList;
378 typedef t_BSLMF_RETURN FuncType(t_ARGS_01,
386 typedef FunctionPointerCPlusPlusLinkage Linkage;
390#if BSLMF_FUNCTIONPOINTERTRAITS_VARIADIC_LIMIT_A >= 9
391template <
class t_BSLMF_RETURN,
class t_ARGS_01,
400struct FunctionPointerTraits<t_BSLMF_RETURN (*)(t_ARGS_01,
411 IS_FUNCTION_POINTER = 1,
414 enum { e_IS_VARARG = 0 };
415 typedef t_BSLMF_RETURN ResultType;
416 typedef typename TypeList<t_ARGS_01,
424 t_ARGS_09>::Type ArgumentList;
425 typedef t_BSLMF_RETURN FuncType(t_ARGS_01,
434 typedef FunctionPointerCPlusPlusLinkage Linkage;
438#if BSLMF_FUNCTIONPOINTERTRAITS_VARIADIC_LIMIT_A >= 10
439template <
class t_BSLMF_RETURN,
class t_ARGS_01,
449struct FunctionPointerTraits<t_BSLMF_RETURN (*)(t_ARGS_01,
461 IS_FUNCTION_POINTER = 1,
464 enum { e_IS_VARARG = 0 };
465 typedef t_BSLMF_RETURN ResultType;
466 typedef typename TypeList<t_ARGS_01,
475 t_ARGS_10>::Type ArgumentList;
476 typedef t_BSLMF_RETURN FuncType(t_ARGS_01,
486 typedef FunctionPointerCPlusPlusLinkage Linkage;
490#if BSLMF_FUNCTIONPOINTERTRAITS_VARIADIC_LIMIT_A >= 11
491template <
class t_BSLMF_RETURN,
class t_ARGS_01,
502struct FunctionPointerTraits<t_BSLMF_RETURN (*)(t_ARGS_01,
515 IS_FUNCTION_POINTER = 1,
518 enum { e_IS_VARARG = 0 };
519 typedef t_BSLMF_RETURN ResultType;
520 typedef typename TypeList<t_ARGS_01,
530 t_ARGS_11>::Type ArgumentList;
531 typedef t_BSLMF_RETURN FuncType(t_ARGS_01,
542 typedef FunctionPointerCPlusPlusLinkage Linkage;
546#if BSLMF_FUNCTIONPOINTERTRAITS_VARIADIC_LIMIT_A >= 12
547template <
class t_BSLMF_RETURN,
class t_ARGS_01,
559struct FunctionPointerTraits<t_BSLMF_RETURN (*)(t_ARGS_01,
573 IS_FUNCTION_POINTER = 1,
576 enum { e_IS_VARARG = 0 };
577 typedef t_BSLMF_RETURN ResultType;
578 typedef typename TypeList<t_ARGS_01,
589 t_ARGS_12>::Type ArgumentList;
590 typedef t_BSLMF_RETURN FuncType(t_ARGS_01,
602 typedef FunctionPointerCPlusPlusLinkage Linkage;
606#if BSLMF_FUNCTIONPOINTERTRAITS_VARIADIC_LIMIT_A >= 13
607template <
class t_BSLMF_RETURN,
class t_ARGS_01,
620struct FunctionPointerTraits<t_BSLMF_RETURN (*)(t_ARGS_01,
635 IS_FUNCTION_POINTER = 1,
638 enum { e_IS_VARARG = 0 };
639 typedef t_BSLMF_RETURN ResultType;
640 typedef typename TypeList<t_ARGS_01,
652 t_ARGS_13>::Type ArgumentList;
653 typedef t_BSLMF_RETURN FuncType(t_ARGS_01,
666 typedef FunctionPointerCPlusPlusLinkage Linkage;
670#if BSLMF_FUNCTIONPOINTERTRAITS_VARIADIC_LIMIT_A >= 14
671template <
class t_BSLMF_RETURN,
class t_ARGS_01,
685struct FunctionPointerTraits<t_BSLMF_RETURN (*)(t_ARGS_01,
701 IS_FUNCTION_POINTER = 1,
704 enum { e_IS_VARARG = 0 };
705 typedef t_BSLMF_RETURN ResultType;
706 typedef typename TypeList<t_ARGS_01,
719 t_ARGS_14>::Type ArgumentList;
720 typedef t_BSLMF_RETURN FuncType(t_ARGS_01,
734 typedef FunctionPointerCPlusPlusLinkage Linkage;
739#if BSLMF_FUNCTIONPOINTERTRAITS_VARIADIC_LIMIT_A >= 0
740template <
class t_BSLMF_RETURN>
741struct FunctionPointerTraits<t_BSLMF_RETURN (*)(...)> {
744 IS_FUNCTION_POINTER = 1,
747 enum { e_IS_VARARG = 1 };
748 typedef t_BSLMF_RETURN ResultType;
750 typedef t_BSLMF_RETURN FuncType(...);
751 typedef FunctionPointerCPlusPlusLinkage Linkage;
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,...)> {
760 IS_FUNCTION_POINTER = 1,
763 enum { e_IS_VARARG = 1 };
764 typedef t_BSLMF_RETURN ResultType;
766 typedef t_BSLMF_RETURN FuncType(t_ARGS_01,...);
767 typedef FunctionPointerCPlusPlusLinkage Linkage;
771#if BSLMF_FUNCTIONPOINTERTRAITS_VARIADIC_LIMIT_A >= 2
772template <
class t_BSLMF_RETURN,
class t_ARGS_01,
774struct FunctionPointerTraits<t_BSLMF_RETURN (*)(t_ARGS_01,
778 IS_FUNCTION_POINTER = 1,
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,
787 typedef FunctionPointerCPlusPlusLinkage Linkage;
791#if BSLMF_FUNCTIONPOINTERTRAITS_VARIADIC_LIMIT_A >= 3
792template <
class t_BSLMF_RETURN,
class t_ARGS_01,
795struct FunctionPointerTraits<t_BSLMF_RETURN (*)(t_ARGS_01,
800 IS_FUNCTION_POINTER = 1,
803 enum { e_IS_VARARG = 1 };
804 typedef t_BSLMF_RETURN ResultType;
805 typedef typename TypeList<t_ARGS_01,
807 t_ARGS_03>::Type ArgumentList;
808 typedef t_BSLMF_RETURN FuncType(t_ARGS_01,
811 typedef FunctionPointerCPlusPlusLinkage Linkage;
815#if BSLMF_FUNCTIONPOINTERTRAITS_VARIADIC_LIMIT_A >= 4
816template <
class t_BSLMF_RETURN,
class t_ARGS_01,
820struct FunctionPointerTraits<t_BSLMF_RETURN (*)(t_ARGS_01,
826 IS_FUNCTION_POINTER = 1,
829 enum { e_IS_VARARG = 1 };
830 typedef t_BSLMF_RETURN ResultType;
831 typedef typename TypeList<t_ARGS_01,
834 t_ARGS_04>::Type ArgumentList;
835 typedef t_BSLMF_RETURN FuncType(t_ARGS_01,
839 typedef FunctionPointerCPlusPlusLinkage Linkage;
843#if BSLMF_FUNCTIONPOINTERTRAITS_VARIADIC_LIMIT_A >= 5
844template <
class t_BSLMF_RETURN,
class t_ARGS_01,
849struct FunctionPointerTraits<t_BSLMF_RETURN (*)(t_ARGS_01,
856 IS_FUNCTION_POINTER = 1,
859 enum { e_IS_VARARG = 1 };
860 typedef t_BSLMF_RETURN ResultType;
861 typedef typename TypeList<t_ARGS_01,
865 t_ARGS_05>::Type ArgumentList;
866 typedef t_BSLMF_RETURN FuncType(t_ARGS_01,
871 typedef FunctionPointerCPlusPlusLinkage Linkage;
875#if BSLMF_FUNCTIONPOINTERTRAITS_VARIADIC_LIMIT_A >= 6
876template <
class t_BSLMF_RETURN,
class t_ARGS_01,
882struct FunctionPointerTraits<t_BSLMF_RETURN (*)(t_ARGS_01,
890 IS_FUNCTION_POINTER = 1,
893 enum { e_IS_VARARG = 1 };
894 typedef t_BSLMF_RETURN ResultType;
895 typedef typename TypeList<t_ARGS_01,
900 t_ARGS_06>::Type ArgumentList;
901 typedef t_BSLMF_RETURN FuncType(t_ARGS_01,
907 typedef FunctionPointerCPlusPlusLinkage Linkage;
911#if BSLMF_FUNCTIONPOINTERTRAITS_VARIADIC_LIMIT_A >= 7
912template <
class t_BSLMF_RETURN,
class t_ARGS_01,
919struct FunctionPointerTraits<t_BSLMF_RETURN (*)(t_ARGS_01,
928 IS_FUNCTION_POINTER = 1,
931 enum { e_IS_VARARG = 1 };
932 typedef t_BSLMF_RETURN ResultType;
933 typedef typename TypeList<t_ARGS_01,
939 t_ARGS_07>::Type ArgumentList;
940 typedef t_BSLMF_RETURN FuncType(t_ARGS_01,
947 typedef FunctionPointerCPlusPlusLinkage Linkage;
951#if BSLMF_FUNCTIONPOINTERTRAITS_VARIADIC_LIMIT_A >= 8
952template <
class t_BSLMF_RETURN,
class t_ARGS_01,
960struct FunctionPointerTraits<t_BSLMF_RETURN (*)(t_ARGS_01,
970 IS_FUNCTION_POINTER = 1,
973 enum { e_IS_VARARG = 1 };
974 typedef t_BSLMF_RETURN ResultType;
975 typedef typename TypeList<t_ARGS_01,
982 t_ARGS_08>::Type ArgumentList;
983 typedef t_BSLMF_RETURN FuncType(t_ARGS_01,
991 typedef FunctionPointerCPlusPlusLinkage Linkage;
995#if BSLMF_FUNCTIONPOINTERTRAITS_VARIADIC_LIMIT_A >= 9
996template <
class t_BSLMF_RETURN,
class t_ARGS_01,
1005struct FunctionPointerTraits<t_BSLMF_RETURN (*)(t_ARGS_01,
1016 IS_FUNCTION_POINTER = 1,
1019 enum { e_IS_VARARG = 1 };
1020 typedef t_BSLMF_RETURN ResultType;
1021 typedef typename TypeList<t_ARGS_01,
1029 t_ARGS_09>::Type ArgumentList;
1030 typedef t_BSLMF_RETURN FuncType(t_ARGS_01,
1039 typedef FunctionPointerCPlusPlusLinkage Linkage;
1043#if BSLMF_FUNCTIONPOINTERTRAITS_VARIADIC_LIMIT_A >= 10
1044template <
class t_BSLMF_RETURN,
class t_ARGS_01,
1054struct FunctionPointerTraits<t_BSLMF_RETURN (*)(t_ARGS_01,
1066 IS_FUNCTION_POINTER = 1,
1069 enum { e_IS_VARARG = 1 };
1070 typedef t_BSLMF_RETURN ResultType;
1071 typedef typename TypeList<t_ARGS_01,
1080 t_ARGS_10>::Type ArgumentList;
1081 typedef t_BSLMF_RETURN FuncType(t_ARGS_01,
1091 typedef FunctionPointerCPlusPlusLinkage Linkage;
1095#if BSLMF_FUNCTIONPOINTERTRAITS_VARIADIC_LIMIT_A >= 11
1096template <
class t_BSLMF_RETURN,
class t_ARGS_01,
1107struct FunctionPointerTraits<t_BSLMF_RETURN (*)(t_ARGS_01,
1120 IS_FUNCTION_POINTER = 1,
1123 enum { e_IS_VARARG = 1 };
1124 typedef t_BSLMF_RETURN ResultType;
1125 typedef typename TypeList<t_ARGS_01,
1135 t_ARGS_11>::Type ArgumentList;
1136 typedef t_BSLMF_RETURN FuncType(t_ARGS_01,
1147 typedef FunctionPointerCPlusPlusLinkage Linkage;
1151#if BSLMF_FUNCTIONPOINTERTRAITS_VARIADIC_LIMIT_A >= 12
1152template <
class t_BSLMF_RETURN,
class t_ARGS_01,
1164struct FunctionPointerTraits<t_BSLMF_RETURN (*)(t_ARGS_01,
1178 IS_FUNCTION_POINTER = 1,
1181 enum { e_IS_VARARG = 1 };
1182 typedef t_BSLMF_RETURN ResultType;
1183 typedef typename TypeList<t_ARGS_01,
1194 t_ARGS_12>::Type ArgumentList;
1195 typedef t_BSLMF_RETURN FuncType(t_ARGS_01,
1207 typedef FunctionPointerCPlusPlusLinkage Linkage;
1211#if BSLMF_FUNCTIONPOINTERTRAITS_VARIADIC_LIMIT_A >= 13
1212template <
class t_BSLMF_RETURN,
class t_ARGS_01,
1225struct FunctionPointerTraits<t_BSLMF_RETURN (*)(t_ARGS_01,
1240 IS_FUNCTION_POINTER = 1,
1243 enum { e_IS_VARARG = 1 };
1244 typedef t_BSLMF_RETURN ResultType;
1245 typedef typename TypeList<t_ARGS_01,
1257 t_ARGS_13>::Type ArgumentList;
1258 typedef t_BSLMF_RETURN FuncType(t_ARGS_01,
1271 typedef FunctionPointerCPlusPlusLinkage Linkage;
1275#if BSLMF_FUNCTIONPOINTERTRAITS_VARIADIC_LIMIT_A >= 14
1276template <
class t_BSLMF_RETURN,
class t_ARGS_01,
1290struct FunctionPointerTraits<t_BSLMF_RETURN (*)(t_ARGS_01,
1306 IS_FUNCTION_POINTER = 1,
1309 enum { e_IS_VARARG = 1 };
1310 typedef t_BSLMF_RETURN ResultType;
1311 typedef typename TypeList<t_ARGS_01,
1324 t_ARGS_14>::Type ArgumentList;
1325 typedef t_BSLMF_RETURN FuncType(t_ARGS_01,
1339 typedef FunctionPointerCPlusPlusLinkage Linkage;
1344#if defined(BSLS_PLATFORM_CMP_CLANG)
1345#pragma clang diagnostic pop
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"
1357template <
class t_BSLMF_RETURN,
class... t_ARGS>
1358struct FunctionPointerTraits<t_BSLMF_RETURN (*)(t_ARGS...)> {
1361 IS_FUNCTION_POINTER = 1,
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;
1371template <
class t_BSLMF_RETURN,
class... t_ARGS>
1372struct FunctionPointerTraits<t_BSLMF_RETURN (*)(t_ARGS...,...)> {
1375 IS_FUNCTION_POINTER = 1,
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;
1385#if defined(BSLS_PLATFORM_CMP_CLANG)
1386#pragma clang diagnostic pop
1392#if defined(BSLS_PLATFORM_CMP_MSVC)
1399template <
class t_PROTOTYPE>
1400struct FunctionPointerTraits<t_PROTOTYPE const>
1401: FunctionPointerTraits<t_PROTOTYPE> {
1408template <
class t_PROTOTYPE>
1409struct FunctionPointerTraits<t_PROTOTYPE volatile>
1410: FunctionPointerTraits<t_PROTOTYPE> {
1417template <
class t_PROTOTYPE>
1418struct FunctionPointerTraits<t_PROTOTYPE const volatile>
1419: FunctionPointerTraits<t_PROTOTYPE> {
1430template <
class t_PROTOTYPE>
1431struct FunctionPointerTraits<t_PROTOTYPE *
const>
1432: FunctionPointerTraits<t_PROTOTYPE *> {
1439template <
class t_PROTOTYPE>
1440struct FunctionPointerTraits<t_PROTOTYPE *
volatile>
1441: FunctionPointerTraits<t_PROTOTYPE *> {
1448template <
class t_PROTOTYPE>
1449struct FunctionPointerTraits<t_PROTOTYPE *
const volatile>
1450: FunctionPointerTraits<t_PROTOTYPE *> {
1455#ifdef BSLS_COMPILERFEATURES_SUPPORT_NOEXCEPT_TYPES
1457#if defined(BSLS_PLATFORM_CMP_CLANG)
1458#pragma clang diagnostic push
1459#pragma clang diagnostic ignored "-Wdeprecated-volatile"
1464template <
class t_BSLMF_RETURN,
class... t_ARGS>
1465struct FunctionPointerTraits<t_BSLMF_RETURN (*)(t_ARGS...) noexcept> {
1468 IS_FUNCTION_POINTER = 1,
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;
1481template <class t_BSLMF_RETURN, class... t_ARGS>
1482struct FunctionPointerTraits<t_BSLMF_RETURN (*)(t_ARGS...,...) noexcept> {
1485 IS_FUNCTION_POINTER = 1,
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;
1495#if defined(BSLS_PLATFORM_CMP_CLANG)
1496#pragma clang diagnostic pop
1503#ifndef BDE_OPENSOURCE_PUBLICATION
1515#ifdef bslmf_FunctionPointerTraits
1516#undef bslmf_FunctionPointerTraits
1519#define bslmf_FunctionPointerTraits bslmf::FunctionPointerTraits
1521#ifdef bslmf_IsFunctionPointer
1522#undef bslmf_IsFunctionPointer
1525#define bslmf_IsFunctionPointer bslmf::IsFunctionPointer
1531# error Not valid except when included from bslmf_functionpointertraits.h
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