11#ifndef INCLUDED_BSLMF_FUNCTIONPOINTERTRAITS_CPP03
12#define INCLUDED_BSLMF_FUNCTIONPOINTERTRAITS_CPP03
63#ifdef COMPILING_BSLMF_FUNCTIONPOINTERTRAITS_H
71struct FunctionPointerCPlusPlusLinkage {
77struct FunctionPointerCLinkage {
90template <
class t_PROTOTYPE>
91struct FunctionPointerTraits {
103template <
class t_PROTOTYPE>
104struct IsFunctionPointer
107 FunctionPointerTraits<t_PROTOTYPE>::IS_FUNCTION_POINTER> {
112#if defined(BSLS_COMPILERFEATURES_SUPPORT_NOEXCEPT_TYPES) && \
113 !defined(BSLS_COMPILERFEATURES_SUPPORT_VARIADIC_TEMPLATES)
117# error Feature not supported for compilers without variadic templates
124#if BSLS_COMPILERFEATURES_SIMULATE_VARIADIC_TEMPLATES
127#ifndef BSLMF_FUNCTIONPOINTERTRAITS_VARIADIC_LIMIT
128#define BSLMF_FUNCTIONPOINTERTRAITS_VARIADIC_LIMIT 14
130#ifndef BSLMF_FUNCTIONPOINTERTRAITS_VARIADIC_LIMIT_A
131#define BSLMF_FUNCTIONPOINTERTRAITS_VARIADIC_LIMIT_A BSLMF_FUNCTIONPOINTERTRAITS_VARIADIC_LIMIT
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"
140#if BSLMF_FUNCTIONPOINTERTRAITS_VARIADIC_LIMIT_A >= 0
141template <
class t_BSLMF_RETURN>
142struct FunctionPointerTraits<t_BSLMF_RETURN (*)()> {
145 IS_FUNCTION_POINTER = 1,
148 enum { e_IS_VARARG = 0 };
149 typedef t_BSLMF_RETURN ResultType;
151 typedef t_BSLMF_RETURN FuncType();
152 typedef FunctionPointerCPlusPlusLinkage Linkage;
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)> {
161 IS_FUNCTION_POINTER = 1,
164 enum { e_IS_VARARG = 0 };
165 typedef t_BSLMF_RETURN ResultType;
167 typedef t_BSLMF_RETURN FuncType(t_ARGS_01);
168 typedef FunctionPointerCPlusPlusLinkage Linkage;
172#if BSLMF_FUNCTIONPOINTERTRAITS_VARIADIC_LIMIT_A >= 2
173template <
class t_BSLMF_RETURN,
class t_ARGS_01,
175struct FunctionPointerTraits<t_BSLMF_RETURN (*)(t_ARGS_01,
179 IS_FUNCTION_POINTER = 1,
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,
188 typedef FunctionPointerCPlusPlusLinkage Linkage;
192#if BSLMF_FUNCTIONPOINTERTRAITS_VARIADIC_LIMIT_A >= 3
193template <
class t_BSLMF_RETURN,
class t_ARGS_01,
196struct FunctionPointerTraits<t_BSLMF_RETURN (*)(t_ARGS_01,
201 IS_FUNCTION_POINTER = 1,
204 enum { e_IS_VARARG = 0 };
205 typedef t_BSLMF_RETURN ResultType;
206 typedef typename TypeList<t_ARGS_01,
208 t_ARGS_03>::Type ArgumentList;
209 typedef t_BSLMF_RETURN FuncType(t_ARGS_01,
212 typedef FunctionPointerCPlusPlusLinkage Linkage;
216#if BSLMF_FUNCTIONPOINTERTRAITS_VARIADIC_LIMIT_A >= 4
217template <
class t_BSLMF_RETURN,
class t_ARGS_01,
221struct FunctionPointerTraits<t_BSLMF_RETURN (*)(t_ARGS_01,
227 IS_FUNCTION_POINTER = 1,
230 enum { e_IS_VARARG = 0 };
231 typedef t_BSLMF_RETURN ResultType;
232 typedef typename TypeList<t_ARGS_01,
235 t_ARGS_04>::Type ArgumentList;
236 typedef t_BSLMF_RETURN FuncType(t_ARGS_01,
240 typedef FunctionPointerCPlusPlusLinkage Linkage;
244#if BSLMF_FUNCTIONPOINTERTRAITS_VARIADIC_LIMIT_A >= 5
245template <
class t_BSLMF_RETURN,
class t_ARGS_01,
250struct FunctionPointerTraits<t_BSLMF_RETURN (*)(t_ARGS_01,
257 IS_FUNCTION_POINTER = 1,
260 enum { e_IS_VARARG = 0 };
261 typedef t_BSLMF_RETURN ResultType;
262 typedef typename TypeList<t_ARGS_01,
266 t_ARGS_05>::Type ArgumentList;
267 typedef t_BSLMF_RETURN FuncType(t_ARGS_01,
272 typedef FunctionPointerCPlusPlusLinkage Linkage;
276#if BSLMF_FUNCTIONPOINTERTRAITS_VARIADIC_LIMIT_A >= 6
277template <
class t_BSLMF_RETURN,
class t_ARGS_01,
283struct FunctionPointerTraits<t_BSLMF_RETURN (*)(t_ARGS_01,
291 IS_FUNCTION_POINTER = 1,
294 enum { e_IS_VARARG = 0 };
295 typedef t_BSLMF_RETURN ResultType;
296 typedef typename TypeList<t_ARGS_01,
301 t_ARGS_06>::Type ArgumentList;
302 typedef t_BSLMF_RETURN FuncType(t_ARGS_01,
308 typedef FunctionPointerCPlusPlusLinkage Linkage;
312#if BSLMF_FUNCTIONPOINTERTRAITS_VARIADIC_LIMIT_A >= 7
313template <
class t_BSLMF_RETURN,
class t_ARGS_01,
320struct FunctionPointerTraits<t_BSLMF_RETURN (*)(t_ARGS_01,
329 IS_FUNCTION_POINTER = 1,
332 enum { e_IS_VARARG = 0 };
333 typedef t_BSLMF_RETURN ResultType;
334 typedef typename TypeList<t_ARGS_01,
340 t_ARGS_07>::Type ArgumentList;
341 typedef t_BSLMF_RETURN FuncType(t_ARGS_01,
348 typedef FunctionPointerCPlusPlusLinkage Linkage;
352#if BSLMF_FUNCTIONPOINTERTRAITS_VARIADIC_LIMIT_A >= 8
353template <
class t_BSLMF_RETURN,
class t_ARGS_01,
361struct FunctionPointerTraits<t_BSLMF_RETURN (*)(t_ARGS_01,
371 IS_FUNCTION_POINTER = 1,
374 enum { e_IS_VARARG = 0 };
375 typedef t_BSLMF_RETURN ResultType;
376 typedef typename TypeList<t_ARGS_01,
383 t_ARGS_08>::Type ArgumentList;
384 typedef t_BSLMF_RETURN FuncType(t_ARGS_01,
392 typedef FunctionPointerCPlusPlusLinkage Linkage;
396#if BSLMF_FUNCTIONPOINTERTRAITS_VARIADIC_LIMIT_A >= 9
397template <
class t_BSLMF_RETURN,
class t_ARGS_01,
406struct FunctionPointerTraits<t_BSLMF_RETURN (*)(t_ARGS_01,
417 IS_FUNCTION_POINTER = 1,
420 enum { e_IS_VARARG = 0 };
421 typedef t_BSLMF_RETURN ResultType;
422 typedef typename TypeList<t_ARGS_01,
430 t_ARGS_09>::Type ArgumentList;
431 typedef t_BSLMF_RETURN FuncType(t_ARGS_01,
440 typedef FunctionPointerCPlusPlusLinkage Linkage;
444#if BSLMF_FUNCTIONPOINTERTRAITS_VARIADIC_LIMIT_A >= 10
445template <
class t_BSLMF_RETURN,
class t_ARGS_01,
455struct FunctionPointerTraits<t_BSLMF_RETURN (*)(t_ARGS_01,
467 IS_FUNCTION_POINTER = 1,
470 enum { e_IS_VARARG = 0 };
471 typedef t_BSLMF_RETURN ResultType;
472 typedef typename TypeList<t_ARGS_01,
481 t_ARGS_10>::Type ArgumentList;
482 typedef t_BSLMF_RETURN FuncType(t_ARGS_01,
492 typedef FunctionPointerCPlusPlusLinkage Linkage;
496#if BSLMF_FUNCTIONPOINTERTRAITS_VARIADIC_LIMIT_A >= 11
497template <
class t_BSLMF_RETURN,
class t_ARGS_01,
508struct FunctionPointerTraits<t_BSLMF_RETURN (*)(t_ARGS_01,
521 IS_FUNCTION_POINTER = 1,
524 enum { e_IS_VARARG = 0 };
525 typedef t_BSLMF_RETURN ResultType;
526 typedef typename TypeList<t_ARGS_01,
536 t_ARGS_11>::Type ArgumentList;
537 typedef t_BSLMF_RETURN FuncType(t_ARGS_01,
548 typedef FunctionPointerCPlusPlusLinkage Linkage;
552#if BSLMF_FUNCTIONPOINTERTRAITS_VARIADIC_LIMIT_A >= 12
553template <
class t_BSLMF_RETURN,
class t_ARGS_01,
565struct FunctionPointerTraits<t_BSLMF_RETURN (*)(t_ARGS_01,
579 IS_FUNCTION_POINTER = 1,
582 enum { e_IS_VARARG = 0 };
583 typedef t_BSLMF_RETURN ResultType;
584 typedef typename TypeList<t_ARGS_01,
595 t_ARGS_12>::Type ArgumentList;
596 typedef t_BSLMF_RETURN FuncType(t_ARGS_01,
608 typedef FunctionPointerCPlusPlusLinkage Linkage;
612#if BSLMF_FUNCTIONPOINTERTRAITS_VARIADIC_LIMIT_A >= 13
613template <
class t_BSLMF_RETURN,
class t_ARGS_01,
626struct FunctionPointerTraits<t_BSLMF_RETURN (*)(t_ARGS_01,
641 IS_FUNCTION_POINTER = 1,
644 enum { e_IS_VARARG = 0 };
645 typedef t_BSLMF_RETURN ResultType;
646 typedef typename TypeList<t_ARGS_01,
658 t_ARGS_13>::Type ArgumentList;
659 typedef t_BSLMF_RETURN FuncType(t_ARGS_01,
672 typedef FunctionPointerCPlusPlusLinkage Linkage;
676#if BSLMF_FUNCTIONPOINTERTRAITS_VARIADIC_LIMIT_A >= 14
677template <
class t_BSLMF_RETURN,
class t_ARGS_01,
691struct FunctionPointerTraits<t_BSLMF_RETURN (*)(t_ARGS_01,
707 IS_FUNCTION_POINTER = 1,
710 enum { e_IS_VARARG = 0 };
711 typedef t_BSLMF_RETURN ResultType;
712 typedef typename TypeList<t_ARGS_01,
725 t_ARGS_14>::Type ArgumentList;
726 typedef t_BSLMF_RETURN FuncType(t_ARGS_01,
740 typedef FunctionPointerCPlusPlusLinkage Linkage;
745#if BSLMF_FUNCTIONPOINTERTRAITS_VARIADIC_LIMIT_A >= 0
746template <
class t_BSLMF_RETURN>
747struct FunctionPointerTraits<t_BSLMF_RETURN (*)(...)> {
750 IS_FUNCTION_POINTER = 1,
753 enum { e_IS_VARARG = 1 };
754 typedef t_BSLMF_RETURN ResultType;
756 typedef t_BSLMF_RETURN FuncType(...);
757 typedef FunctionPointerCPlusPlusLinkage Linkage;
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,...)> {
766 IS_FUNCTION_POINTER = 1,
769 enum { e_IS_VARARG = 1 };
770 typedef t_BSLMF_RETURN ResultType;
772 typedef t_BSLMF_RETURN FuncType(t_ARGS_01,...);
773 typedef FunctionPointerCPlusPlusLinkage Linkage;
777#if BSLMF_FUNCTIONPOINTERTRAITS_VARIADIC_LIMIT_A >= 2
778template <
class t_BSLMF_RETURN,
class t_ARGS_01,
780struct FunctionPointerTraits<t_BSLMF_RETURN (*)(t_ARGS_01,
784 IS_FUNCTION_POINTER = 1,
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,
793 typedef FunctionPointerCPlusPlusLinkage Linkage;
797#if BSLMF_FUNCTIONPOINTERTRAITS_VARIADIC_LIMIT_A >= 3
798template <
class t_BSLMF_RETURN,
class t_ARGS_01,
801struct FunctionPointerTraits<t_BSLMF_RETURN (*)(t_ARGS_01,
806 IS_FUNCTION_POINTER = 1,
809 enum { e_IS_VARARG = 1 };
810 typedef t_BSLMF_RETURN ResultType;
811 typedef typename TypeList<t_ARGS_01,
813 t_ARGS_03>::Type ArgumentList;
814 typedef t_BSLMF_RETURN FuncType(t_ARGS_01,
817 typedef FunctionPointerCPlusPlusLinkage Linkage;
821#if BSLMF_FUNCTIONPOINTERTRAITS_VARIADIC_LIMIT_A >= 4
822template <
class t_BSLMF_RETURN,
class t_ARGS_01,
826struct FunctionPointerTraits<t_BSLMF_RETURN (*)(t_ARGS_01,
832 IS_FUNCTION_POINTER = 1,
835 enum { e_IS_VARARG = 1 };
836 typedef t_BSLMF_RETURN ResultType;
837 typedef typename TypeList<t_ARGS_01,
840 t_ARGS_04>::Type ArgumentList;
841 typedef t_BSLMF_RETURN FuncType(t_ARGS_01,
845 typedef FunctionPointerCPlusPlusLinkage Linkage;
849#if BSLMF_FUNCTIONPOINTERTRAITS_VARIADIC_LIMIT_A >= 5
850template <
class t_BSLMF_RETURN,
class t_ARGS_01,
855struct FunctionPointerTraits<t_BSLMF_RETURN (*)(t_ARGS_01,
862 IS_FUNCTION_POINTER = 1,
865 enum { e_IS_VARARG = 1 };
866 typedef t_BSLMF_RETURN ResultType;
867 typedef typename TypeList<t_ARGS_01,
871 t_ARGS_05>::Type ArgumentList;
872 typedef t_BSLMF_RETURN FuncType(t_ARGS_01,
877 typedef FunctionPointerCPlusPlusLinkage Linkage;
881#if BSLMF_FUNCTIONPOINTERTRAITS_VARIADIC_LIMIT_A >= 6
882template <
class t_BSLMF_RETURN,
class t_ARGS_01,
888struct FunctionPointerTraits<t_BSLMF_RETURN (*)(t_ARGS_01,
896 IS_FUNCTION_POINTER = 1,
899 enum { e_IS_VARARG = 1 };
900 typedef t_BSLMF_RETURN ResultType;
901 typedef typename TypeList<t_ARGS_01,
906 t_ARGS_06>::Type ArgumentList;
907 typedef t_BSLMF_RETURN FuncType(t_ARGS_01,
913 typedef FunctionPointerCPlusPlusLinkage Linkage;
917#if BSLMF_FUNCTIONPOINTERTRAITS_VARIADIC_LIMIT_A >= 7
918template <
class t_BSLMF_RETURN,
class t_ARGS_01,
925struct FunctionPointerTraits<t_BSLMF_RETURN (*)(t_ARGS_01,
934 IS_FUNCTION_POINTER = 1,
937 enum { e_IS_VARARG = 1 };
938 typedef t_BSLMF_RETURN ResultType;
939 typedef typename TypeList<t_ARGS_01,
945 t_ARGS_07>::Type ArgumentList;
946 typedef t_BSLMF_RETURN FuncType(t_ARGS_01,
953 typedef FunctionPointerCPlusPlusLinkage Linkage;
957#if BSLMF_FUNCTIONPOINTERTRAITS_VARIADIC_LIMIT_A >= 8
958template <
class t_BSLMF_RETURN,
class t_ARGS_01,
966struct FunctionPointerTraits<t_BSLMF_RETURN (*)(t_ARGS_01,
976 IS_FUNCTION_POINTER = 1,
979 enum { e_IS_VARARG = 1 };
980 typedef t_BSLMF_RETURN ResultType;
981 typedef typename TypeList<t_ARGS_01,
988 t_ARGS_08>::Type ArgumentList;
989 typedef t_BSLMF_RETURN FuncType(t_ARGS_01,
997 typedef FunctionPointerCPlusPlusLinkage Linkage;
1001#if BSLMF_FUNCTIONPOINTERTRAITS_VARIADIC_LIMIT_A >= 9
1002template <
class t_BSLMF_RETURN,
class t_ARGS_01,
1011struct FunctionPointerTraits<t_BSLMF_RETURN (*)(t_ARGS_01,
1022 IS_FUNCTION_POINTER = 1,
1025 enum { e_IS_VARARG = 1 };
1026 typedef t_BSLMF_RETURN ResultType;
1027 typedef typename TypeList<t_ARGS_01,
1035 t_ARGS_09>::Type ArgumentList;
1036 typedef t_BSLMF_RETURN FuncType(t_ARGS_01,
1045 typedef FunctionPointerCPlusPlusLinkage Linkage;
1049#if BSLMF_FUNCTIONPOINTERTRAITS_VARIADIC_LIMIT_A >= 10
1050template <
class t_BSLMF_RETURN,
class t_ARGS_01,
1060struct FunctionPointerTraits<t_BSLMF_RETURN (*)(t_ARGS_01,
1072 IS_FUNCTION_POINTER = 1,
1075 enum { e_IS_VARARG = 1 };
1076 typedef t_BSLMF_RETURN ResultType;
1077 typedef typename TypeList<t_ARGS_01,
1086 t_ARGS_10>::Type ArgumentList;
1087 typedef t_BSLMF_RETURN FuncType(t_ARGS_01,
1097 typedef FunctionPointerCPlusPlusLinkage Linkage;
1101#if BSLMF_FUNCTIONPOINTERTRAITS_VARIADIC_LIMIT_A >= 11
1102template <
class t_BSLMF_RETURN,
class t_ARGS_01,
1113struct FunctionPointerTraits<t_BSLMF_RETURN (*)(t_ARGS_01,
1126 IS_FUNCTION_POINTER = 1,
1129 enum { e_IS_VARARG = 1 };
1130 typedef t_BSLMF_RETURN ResultType;
1131 typedef typename TypeList<t_ARGS_01,
1141 t_ARGS_11>::Type ArgumentList;
1142 typedef t_BSLMF_RETURN FuncType(t_ARGS_01,
1153 typedef FunctionPointerCPlusPlusLinkage Linkage;
1157#if BSLMF_FUNCTIONPOINTERTRAITS_VARIADIC_LIMIT_A >= 12
1158template <
class t_BSLMF_RETURN,
class t_ARGS_01,
1170struct FunctionPointerTraits<t_BSLMF_RETURN (*)(t_ARGS_01,
1184 IS_FUNCTION_POINTER = 1,
1187 enum { e_IS_VARARG = 1 };
1188 typedef t_BSLMF_RETURN ResultType;
1189 typedef typename TypeList<t_ARGS_01,
1200 t_ARGS_12>::Type ArgumentList;
1201 typedef t_BSLMF_RETURN FuncType(t_ARGS_01,
1213 typedef FunctionPointerCPlusPlusLinkage Linkage;
1217#if BSLMF_FUNCTIONPOINTERTRAITS_VARIADIC_LIMIT_A >= 13
1218template <
class t_BSLMF_RETURN,
class t_ARGS_01,
1231struct FunctionPointerTraits<t_BSLMF_RETURN (*)(t_ARGS_01,
1246 IS_FUNCTION_POINTER = 1,
1249 enum { e_IS_VARARG = 1 };
1250 typedef t_BSLMF_RETURN ResultType;
1251 typedef typename TypeList<t_ARGS_01,
1263 t_ARGS_13>::Type ArgumentList;
1264 typedef t_BSLMF_RETURN FuncType(t_ARGS_01,
1277 typedef FunctionPointerCPlusPlusLinkage Linkage;
1281#if BSLMF_FUNCTIONPOINTERTRAITS_VARIADIC_LIMIT_A >= 14
1282template <
class t_BSLMF_RETURN,
class t_ARGS_01,
1296struct FunctionPointerTraits<t_BSLMF_RETURN (*)(t_ARGS_01,
1312 IS_FUNCTION_POINTER = 1,
1315 enum { e_IS_VARARG = 1 };
1316 typedef t_BSLMF_RETURN ResultType;
1317 typedef typename TypeList<t_ARGS_01,
1330 t_ARGS_14>::Type ArgumentList;
1331 typedef t_BSLMF_RETURN FuncType(t_ARGS_01,
1345 typedef FunctionPointerCPlusPlusLinkage Linkage;
1350#if defined(BSLS_PLATFORM_CMP_CLANG)
1351#pragma clang diagnostic pop
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"
1363template <
class t_BSLMF_RETURN,
class... t_ARGS>
1364struct FunctionPointerTraits<t_BSLMF_RETURN (*)(t_ARGS...)> {
1367 IS_FUNCTION_POINTER = 1,
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;
1377template <
class t_BSLMF_RETURN,
class... t_ARGS>
1378struct FunctionPointerTraits<t_BSLMF_RETURN (*)(t_ARGS...,...)> {
1381 IS_FUNCTION_POINTER = 1,
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;
1391#if defined(BSLS_PLATFORM_CMP_CLANG)
1392#pragma clang diagnostic pop
1398#if defined(BSLS_PLATFORM_CMP_MSVC)
1405template <
class t_PROTOTYPE>
1406struct FunctionPointerTraits<t_PROTOTYPE const>
1407: FunctionPointerTraits<t_PROTOTYPE> {
1414template <
class t_PROTOTYPE>
1415struct FunctionPointerTraits<t_PROTOTYPE volatile>
1416: FunctionPointerTraits<t_PROTOTYPE> {
1423template <
class t_PROTOTYPE>
1424struct FunctionPointerTraits<t_PROTOTYPE const volatile>
1425: FunctionPointerTraits<t_PROTOTYPE> {
1436template <
class t_PROTOTYPE>
1437struct FunctionPointerTraits<t_PROTOTYPE *
const>
1438: FunctionPointerTraits<t_PROTOTYPE *> {
1445template <
class t_PROTOTYPE>
1446struct FunctionPointerTraits<t_PROTOTYPE *
volatile>
1447: FunctionPointerTraits<t_PROTOTYPE *> {
1454template <
class t_PROTOTYPE>
1455struct FunctionPointerTraits<t_PROTOTYPE *
const volatile>
1456: FunctionPointerTraits<t_PROTOTYPE *> {
1461#ifdef BSLS_COMPILERFEATURES_SUPPORT_NOEXCEPT_TYPES
1463#if defined(BSLS_PLATFORM_CMP_CLANG)
1464#pragma clang diagnostic push
1465#pragma clang diagnostic ignored "-Wdeprecated-volatile"
1470template <
class t_BSLMF_RETURN,
class... t_ARGS>
1471struct FunctionPointerTraits<t_BSLMF_RETURN (*)(t_ARGS...) noexcept> {
1474 IS_FUNCTION_POINTER = 1,
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;
1487template <class t_BSLMF_RETURN, class... t_ARGS>
1488struct FunctionPointerTraits<t_BSLMF_RETURN (*)(t_ARGS...,...) noexcept> {
1491 IS_FUNCTION_POINTER = 1,
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;
1501#if defined(BSLS_PLATFORM_CMP_CLANG)
1502#pragma clang diagnostic pop
1509#ifndef BDE_OPENSOURCE_PUBLICATION
1521#ifdef bslmf_FunctionPointerTraits
1522#undef bslmf_FunctionPointerTraits
1525#define bslmf_FunctionPointerTraits bslmf::FunctionPointerTraits
1527#ifdef bslmf_IsFunctionPointer
1528#undef bslmf_IsFunctionPointer
1531#define bslmf_IsFunctionPointer bslmf::IsFunctionPointer
1537# 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: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