11#ifndef INCLUDED_BSLSTL_FUNCTION_INVOKERUTIL_CPP03
12#define INCLUDED_BSLSTL_FUNCTION_INVOKERUTIL_CPP03
63#ifdef COMPILING_BSLSTL_FUNCTION_INVOKERUTIL_H
65#ifndef BSLS_PLATFORM_CMP_SUN
66#define BSLSTL_FUNCTION_INVOKERUTIL_CAST_RESULT(RET, X) static_cast<RET>(X)
68#define BSLSTL_FUNCTION_INVOKERUTIL_CAST_RESULT(RET, X) (RET)(X)
71#if defined(BSLMF_INVOKERESULT_SUPPORT_CPP17_SEMANTICS) \
72 && defined(BSLS_COMPILERFEATURES_SUPPORT_DECLTYPE) \
73 && defined(BSLS_COMPILERFEATURES_SUPPORT_RVALUE_REFERENCES) \
74 && defined(BSLS_LIBRARYFEATURES_HAS_CPP11_BASELINE_LIBRARY)
75#define BSLSTL_FUNCTION_INVOKERUTIL_SUPPORT_IS_FUNC_INVOCABLE
81#ifdef BSLSTL_FUNCTION_INVOKERUTIL_SUPPORT_IS_FUNC_INVOCABLE
84template <
class PROTOTYPE,
class FUNC>
85struct Function_InvokerUtil_IsFuncInvocable;
98struct Function_InvokerUtil {
116#ifdef BSLSTL_FUNCTION_INVOKERUTIL_SUPPORT_IS_FUNC_INVOCABLE
141 template <
class PROTOTYPE,
class FUNC>
142 struct IsFuncInvocable
143 : Function_InvokerUtil_IsFuncInvocable<PROTOTYPE, FUNC> {
153 template <
class PROTOTYPE>
162 template <
class PROTOTYPE,
class FUNC>
193struct Function_InvokerUtilNullCheck {
198 static bool isNull(
const FUNC&);
203struct Function_InvokerUtilNullCheck<FUNC *> {
209 static bool isNull(FUNC *f);
213template <
class CLASS,
class MEMTYPE>
214struct Function_InvokerUtilNullCheck<MEMTYPE CLASS::*> {
221 static bool isNull(MEMTYPE CLASS::* f);
224#if BSLS_COMPILERFEATURES_SIMULATE_VARIADIC_TEMPLATES
227#ifndef BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT
228#define BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT 13
230#ifndef BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_A
231#define BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_A BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT
235#ifdef BSLSTL_FUNCTION_INVOKERUTIL_SUPPORT_IS_FUNC_INVOCABLE
237template <
class VOID_TYPE,
240#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_A >= 0
241 ,
class ARGS_0 = BSLS_COMPILERFEATURES_NILT
244#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_A >= 1
245 ,
class ARGS_1 = BSLS_COMPILERFEATURES_NILT
248#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_A >= 2
249 ,
class ARGS_2 = BSLS_COMPILERFEATURES_NILT
252#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_A >= 3
253 ,
class ARGS_3 = BSLS_COMPILERFEATURES_NILT
256#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_A >= 4
257 ,
class ARGS_4 = BSLS_COMPILERFEATURES_NILT
260#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_A >= 5
261 ,
class ARGS_5 = BSLS_COMPILERFEATURES_NILT
264#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_A >= 6
265 ,
class ARGS_6 = BSLS_COMPILERFEATURES_NILT
268#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_A >= 7
269 ,
class ARGS_7 = BSLS_COMPILERFEATURES_NILT
272#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_A >= 8
273 ,
class ARGS_8 = BSLS_COMPILERFEATURES_NILT
276#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_A >= 9
277 ,
class ARGS_9 = BSLS_COMPILERFEATURES_NILT
280#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_A >= 10
281 ,
class ARGS_10 = BSLS_COMPILERFEATURES_NILT
284#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_A >= 11
285 ,
class ARGS_11 = BSLS_COMPILERFEATURES_NILT
288#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_A >= 12
289 ,
class ARGS_12 = BSLS_COMPILERFEATURES_NILT
291 ,
class = BSLS_COMPILERFEATURES_NILT>
292struct Function_InvokerUtil_IsFuncInvocableImp;
295#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_A >= 0
296template <
class RET,
class FUNC>
297struct Function_InvokerUtil_IsFuncInvocable<RET(), FUNC>
298: Function_InvokerUtil_IsFuncInvocableImp<void, RET, FUNC> {
302#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_A >= 1
303template <
class RET,
class FUNC,
class ARGS_01>
304struct Function_InvokerUtil_IsFuncInvocable<RET(ARGS_01), FUNC>
305: Function_InvokerUtil_IsFuncInvocableImp<void, RET, FUNC, ARGS_01> {
309#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_A >= 2
310template <
class RET,
class FUNC,
class ARGS_01,
312struct Function_InvokerUtil_IsFuncInvocable<RET(ARGS_01,
314: Function_InvokerUtil_IsFuncInvocableImp<void, RET, FUNC, ARGS_01,
319#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_A >= 3
320template <
class RET,
class FUNC,
class ARGS_01,
323struct Function_InvokerUtil_IsFuncInvocable<RET(ARGS_01,
326: Function_InvokerUtil_IsFuncInvocableImp<void, RET, FUNC, ARGS_01,
332#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_A >= 4
333template <
class RET,
class FUNC,
class ARGS_01,
337struct Function_InvokerUtil_IsFuncInvocable<RET(ARGS_01,
341: Function_InvokerUtil_IsFuncInvocableImp<void, RET, FUNC, ARGS_01,
348#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_A >= 5
349template <
class RET,
class FUNC,
class ARGS_01,
354struct Function_InvokerUtil_IsFuncInvocable<RET(ARGS_01,
359: Function_InvokerUtil_IsFuncInvocableImp<void, RET, FUNC, ARGS_01,
367#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_A >= 6
368template <
class RET,
class FUNC,
class ARGS_01,
374struct Function_InvokerUtil_IsFuncInvocable<RET(ARGS_01,
380: Function_InvokerUtil_IsFuncInvocableImp<void, RET, FUNC, ARGS_01,
389#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_A >= 7
390template <
class RET,
class FUNC,
class ARGS_01,
397struct Function_InvokerUtil_IsFuncInvocable<RET(ARGS_01,
404: Function_InvokerUtil_IsFuncInvocableImp<void, RET, FUNC, ARGS_01,
414#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_A >= 8
415template <
class RET,
class FUNC,
class ARGS_01,
423struct Function_InvokerUtil_IsFuncInvocable<RET(ARGS_01,
431: Function_InvokerUtil_IsFuncInvocableImp<void, RET, FUNC, ARGS_01,
442#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_A >= 9
443template <
class RET,
class FUNC,
class ARGS_01,
452struct Function_InvokerUtil_IsFuncInvocable<RET(ARGS_01,
461: Function_InvokerUtil_IsFuncInvocableImp<void, RET, FUNC, ARGS_01,
473#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_A >= 10
474template <
class RET,
class FUNC,
class ARGS_01,
484struct Function_InvokerUtil_IsFuncInvocable<RET(ARGS_01,
494: Function_InvokerUtil_IsFuncInvocableImp<void, RET, FUNC, ARGS_01,
507#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_A >= 11
508template <
class RET,
class FUNC,
class ARGS_01,
519struct Function_InvokerUtil_IsFuncInvocable<RET(ARGS_01,
530: Function_InvokerUtil_IsFuncInvocableImp<void, RET, FUNC, ARGS_01,
544#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_A >= 12
545template <
class RET,
class FUNC,
class ARGS_01,
557struct Function_InvokerUtil_IsFuncInvocable<RET(ARGS_01,
569: Function_InvokerUtil_IsFuncInvocableImp<void, RET, FUNC, ARGS_01,
584#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_A >= 13
585template <
class RET,
class FUNC,
class ARGS_01,
598struct Function_InvokerUtil_IsFuncInvocable<RET(ARGS_01,
611: Function_InvokerUtil_IsFuncInvocableImp<void, RET, FUNC, ARGS_01,
630struct Function_InvokerUtil_ForwardType;
632template <
class FROM,
class TO>
633struct Function_InvokerUtil_IsExplicitlyConvertible;
636#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_A >= 0
637 ,
class ARGS_0 = BSLS_COMPILERFEATURES_NILT
640#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_A >= 1
641 ,
class ARGS_1 = BSLS_COMPILERFEATURES_NILT
644#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_A >= 2
645 ,
class ARGS_2 = BSLS_COMPILERFEATURES_NILT
648#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_A >= 3
649 ,
class ARGS_3 = BSLS_COMPILERFEATURES_NILT
652#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_A >= 4
653 ,
class ARGS_4 = BSLS_COMPILERFEATURES_NILT
656#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_A >= 5
657 ,
class ARGS_5 = BSLS_COMPILERFEATURES_NILT
660#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_A >= 6
661 ,
class ARGS_6 = BSLS_COMPILERFEATURES_NILT
664#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_A >= 7
665 ,
class ARGS_7 = BSLS_COMPILERFEATURES_NILT
668#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_A >= 8
669 ,
class ARGS_8 = BSLS_COMPILERFEATURES_NILT
672#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_A >= 9
673 ,
class ARGS_9 = BSLS_COMPILERFEATURES_NILT
676#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_A >= 10
677 ,
class ARGS_10 = BSLS_COMPILERFEATURES_NILT
680#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_A >= 11
681 ,
class ARGS_11 = BSLS_COMPILERFEATURES_NILT
684#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_A >= 12
685 ,
class ARGS_12 = BSLS_COMPILERFEATURES_NILT
687 ,
class = BSLS_COMPILERFEATURES_NILT>
688struct Function_InvokerUtil_ResultType;
691#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_A >= 0
692template <
class VOID_TYPE,
class RET,
class FUNC>
693struct Function_InvokerUtil_IsFuncInvocableImp<VOID_TYPE, RET, FUNC
698#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_A >= 1
699template <
class VOID_TYPE,
class RET,
class FUNC,
class ARGS_01>
700struct Function_InvokerUtil_IsFuncInvocableImp<VOID_TYPE, RET, FUNC, ARGS_01
705#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_A >= 2
706template <
class VOID_TYPE,
class RET,
class FUNC,
class ARGS_01,
708struct Function_InvokerUtil_IsFuncInvocableImp<VOID_TYPE, RET, FUNC, ARGS_01,
714#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_A >= 3
715template <
class VOID_TYPE,
class RET,
class FUNC,
class ARGS_01,
718struct Function_InvokerUtil_IsFuncInvocableImp<VOID_TYPE, RET, FUNC, ARGS_01,
725#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_A >= 4
726template <
class VOID_TYPE,
class RET,
class FUNC,
class ARGS_01,
730struct Function_InvokerUtil_IsFuncInvocableImp<VOID_TYPE, RET, FUNC, ARGS_01,
738#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_A >= 5
739template <
class VOID_TYPE,
class RET,
class FUNC,
class ARGS_01,
744struct Function_InvokerUtil_IsFuncInvocableImp<VOID_TYPE, RET, FUNC, ARGS_01,
753#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_A >= 6
754template <
class VOID_TYPE,
class RET,
class FUNC,
class ARGS_01,
760struct Function_InvokerUtil_IsFuncInvocableImp<VOID_TYPE, RET, FUNC, ARGS_01,
770#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_A >= 7
771template <
class VOID_TYPE,
class RET,
class FUNC,
class ARGS_01,
778struct Function_InvokerUtil_IsFuncInvocableImp<VOID_TYPE, RET, FUNC, ARGS_01,
789#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_A >= 8
790template <
class VOID_TYPE,
class RET,
class FUNC,
class ARGS_01,
798struct Function_InvokerUtil_IsFuncInvocableImp<VOID_TYPE, RET, FUNC, ARGS_01,
810#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_A >= 9
811template <
class VOID_TYPE,
class RET,
class FUNC,
class ARGS_01,
820struct Function_InvokerUtil_IsFuncInvocableImp<VOID_TYPE, RET, FUNC, ARGS_01,
833#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_A >= 10
834template <
class VOID_TYPE,
class RET,
class FUNC,
class ARGS_01,
844struct Function_InvokerUtil_IsFuncInvocableImp<VOID_TYPE, RET, FUNC, ARGS_01,
858#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_A >= 11
859template <
class VOID_TYPE,
class RET,
class FUNC,
class ARGS_01,
870struct Function_InvokerUtil_IsFuncInvocableImp<VOID_TYPE, RET, FUNC, ARGS_01,
885#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_A >= 12
886template <
class VOID_TYPE,
class RET,
class FUNC,
class ARGS_01,
898struct Function_InvokerUtil_IsFuncInvocableImp<VOID_TYPE, RET, FUNC, ARGS_01,
914#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_A >= 13
915template <
class VOID_TYPE,
class RET,
class FUNC,
class ARGS_01,
928struct Function_InvokerUtil_IsFuncInvocableImp<VOID_TYPE, RET, FUNC, ARGS_01,
946#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_A >= 0
947template <
class RET,
class FUNC>
948struct Function_InvokerUtil_IsFuncInvocableImp<
949 typename
bslmf::VoidType<
950 typename Function_InvokerUtil_ResultType<FUNC>::type>::type,
954 bsl::is_void<RET>::value,
956 Function_InvokerUtil_IsExplicitlyConvertible<
957 typename Function_InvokerUtil_ResultType<FUNC>::type,
962#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_A >= 1
963template <
class RET,
class FUNC,
class ARGS_01>
964struct Function_InvokerUtil_IsFuncInvocableImp<
965 typename
bslmf::VoidType<
966 typename Function_InvokerUtil_ResultType<FUNC, ARGS_01>::type>::type,
971 bsl::is_void<RET>::value,
973 Function_InvokerUtil_IsExplicitlyConvertible<
974 typename Function_InvokerUtil_ResultType<FUNC, ARGS_01>::type,
979#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_A >= 2
980template <
class RET,
class FUNC,
class ARGS_01,
982struct Function_InvokerUtil_IsFuncInvocableImp<
983 typename
bslmf::VoidType<
984 typename Function_InvokerUtil_ResultType<FUNC, ARGS_01,
985 ARGS_02>::type>::type,
991 bsl::is_void<RET>::value,
993 Function_InvokerUtil_IsExplicitlyConvertible<
994 typename Function_InvokerUtil_ResultType<FUNC, ARGS_01,
1000#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_A >= 3
1001template <
class RET,
class FUNC,
class ARGS_01,
1004struct Function_InvokerUtil_IsFuncInvocableImp<
1005 typename
bslmf::VoidType<
1006 typename Function_InvokerUtil_ResultType<FUNC, ARGS_01,
1008 ARGS_03>::type>::type,
1015 bsl::is_void<RET>::value,
1017 Function_InvokerUtil_IsExplicitlyConvertible<
1018 typename Function_InvokerUtil_ResultType<FUNC, ARGS_01,
1025#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_A >= 4
1026template <
class RET,
class FUNC,
class ARGS_01,
1030struct Function_InvokerUtil_IsFuncInvocableImp<
1031 typename
bslmf::VoidType<
1032 typename Function_InvokerUtil_ResultType<FUNC, ARGS_01,
1035 ARGS_04>::type>::type,
1043 bsl::is_void<RET>::value,
1045 Function_InvokerUtil_IsExplicitlyConvertible<
1046 typename Function_InvokerUtil_ResultType<FUNC, ARGS_01,
1054#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_A >= 5
1055template <
class RET,
class FUNC,
class ARGS_01,
1060struct Function_InvokerUtil_IsFuncInvocableImp<
1061 typename
bslmf::VoidType<
1062 typename Function_InvokerUtil_ResultType<FUNC, ARGS_01,
1066 ARGS_05>::type>::type,
1075 bsl::is_void<RET>::value,
1077 Function_InvokerUtil_IsExplicitlyConvertible<
1078 typename Function_InvokerUtil_ResultType<FUNC, ARGS_01,
1087#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_A >= 6
1088template <
class RET,
class FUNC,
class ARGS_01,
1094struct Function_InvokerUtil_IsFuncInvocableImp<
1095 typename
bslmf::VoidType<
1096 typename Function_InvokerUtil_ResultType<FUNC, ARGS_01,
1101 ARGS_06>::type>::type,
1111 bsl::is_void<RET>::value,
1113 Function_InvokerUtil_IsExplicitlyConvertible<
1114 typename Function_InvokerUtil_ResultType<FUNC, ARGS_01,
1124#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_A >= 7
1125template <
class RET,
class FUNC,
class ARGS_01,
1132struct Function_InvokerUtil_IsFuncInvocableImp<
1133 typename
bslmf::VoidType<
1134 typename Function_InvokerUtil_ResultType<FUNC, ARGS_01,
1140 ARGS_07>::type>::type,
1151 bsl::is_void<RET>::value,
1153 Function_InvokerUtil_IsExplicitlyConvertible<
1154 typename Function_InvokerUtil_ResultType<FUNC, ARGS_01,
1165#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_A >= 8
1166template <
class RET,
class FUNC,
class ARGS_01,
1174struct Function_InvokerUtil_IsFuncInvocableImp<
1175 typename
bslmf::VoidType<
1176 typename Function_InvokerUtil_ResultType<FUNC, ARGS_01,
1183 ARGS_08>::type>::type,
1195 bsl::is_void<RET>::value,
1197 Function_InvokerUtil_IsExplicitlyConvertible<
1198 typename Function_InvokerUtil_ResultType<FUNC, ARGS_01,
1210#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_A >= 9
1211template <
class RET,
class FUNC,
class ARGS_01,
1220struct Function_InvokerUtil_IsFuncInvocableImp<
1221 typename
bslmf::VoidType<
1222 typename Function_InvokerUtil_ResultType<FUNC, ARGS_01,
1230 ARGS_09>::type>::type,
1243 bsl::is_void<RET>::value,
1245 Function_InvokerUtil_IsExplicitlyConvertible<
1246 typename Function_InvokerUtil_ResultType<FUNC, ARGS_01,
1259#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_A >= 10
1260template <
class RET,
class FUNC,
class ARGS_01,
1270struct Function_InvokerUtil_IsFuncInvocableImp<
1271 typename
bslmf::VoidType<
1272 typename Function_InvokerUtil_ResultType<FUNC, ARGS_01,
1281 ARGS_10>::type>::type,
1295 bsl::is_void<RET>::value,
1297 Function_InvokerUtil_IsExplicitlyConvertible<
1298 typename Function_InvokerUtil_ResultType<FUNC, ARGS_01,
1312#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_A >= 11
1313template <
class RET,
class FUNC,
class ARGS_01,
1324struct Function_InvokerUtil_IsFuncInvocableImp<
1325 typename
bslmf::VoidType<
1326 typename Function_InvokerUtil_ResultType<FUNC, ARGS_01,
1336 ARGS_11>::type>::type,
1351 bsl::is_void<RET>::value,
1353 Function_InvokerUtil_IsExplicitlyConvertible<
1354 typename Function_InvokerUtil_ResultType<FUNC, ARGS_01,
1369#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_A >= 12
1370template <
class RET,
class FUNC,
class ARGS_01,
1382struct Function_InvokerUtil_IsFuncInvocableImp<
1383 typename
bslmf::VoidType<
1384 typename Function_InvokerUtil_ResultType<FUNC, ARGS_01,
1395 ARGS_12>::type>::type,
1411 bsl::is_void<RET>::value,
1413 Function_InvokerUtil_IsExplicitlyConvertible<
1414 typename Function_InvokerUtil_ResultType<FUNC, ARGS_01,
1430#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_A >= 13
1431template <
class RET,
class FUNC,
class ARGS_01,
1444struct Function_InvokerUtil_IsFuncInvocableImp<
1445 typename
bslmf::VoidType<
1446 typename Function_InvokerUtil_ResultType<FUNC, ARGS_01,
1458 ARGS_13>::type>::type,
1475 bsl::is_void<RET>::value,
1477 Function_InvokerUtil_IsExplicitlyConvertible<
1478 typename Function_InvokerUtil_ResultType<FUNC, ARGS_01,
1497template <
class VOID_TYPE,
1499#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_A >= 0
1500 ,
class ARGS_0 = BSLS_COMPILERFEATURES_NILT
1503#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_A >= 1
1504 ,
class ARGS_1 = BSLS_COMPILERFEATURES_NILT
1507#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_A >= 2
1508 ,
class ARGS_2 = BSLS_COMPILERFEATURES_NILT
1511#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_A >= 3
1512 ,
class ARGS_3 = BSLS_COMPILERFEATURES_NILT
1515#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_A >= 4
1516 ,
class ARGS_4 = BSLS_COMPILERFEATURES_NILT
1519#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_A >= 5
1520 ,
class ARGS_5 = BSLS_COMPILERFEATURES_NILT
1523#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_A >= 6
1524 ,
class ARGS_6 = BSLS_COMPILERFEATURES_NILT
1527#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_A >= 7
1528 ,
class ARGS_7 = BSLS_COMPILERFEATURES_NILT
1531#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_A >= 8
1532 ,
class ARGS_8 = BSLS_COMPILERFEATURES_NILT
1535#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_A >= 9
1536 ,
class ARGS_9 = BSLS_COMPILERFEATURES_NILT
1539#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_A >= 10
1540 ,
class ARGS_10 = BSLS_COMPILERFEATURES_NILT
1543#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_A >= 11
1544 ,
class ARGS_11 = BSLS_COMPILERFEATURES_NILT
1547#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_A >= 12
1548 ,
class ARGS_12 = BSLS_COMPILERFEATURES_NILT
1550 ,
class = BSLS_COMPILERFEATURES_NILT>
1551struct Function_InvokerUtil_ResultTypeImp;
1554#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_A >= 0
1555template <
class FUNC>
1556struct Function_InvokerUtil_ResultType<FUNC>
1557: Function_InvokerUtil_ResultTypeImp<void, FUNC> {
1561#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_A >= 1
1562template <
class FUNC,
class ARGS_01>
1563struct Function_InvokerUtil_ResultType<FUNC, ARGS_01>
1564: Function_InvokerUtil_ResultTypeImp<void, FUNC, ARGS_01> {
1568#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_A >= 2
1569template <
class FUNC,
class ARGS_01,
1571struct Function_InvokerUtil_ResultType<FUNC, ARGS_01,
1573: Function_InvokerUtil_ResultTypeImp<void, FUNC, ARGS_01,
1578#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_A >= 3
1579template <
class FUNC,
class ARGS_01,
1582struct Function_InvokerUtil_ResultType<FUNC, ARGS_01,
1585: Function_InvokerUtil_ResultTypeImp<void, FUNC, ARGS_01,
1591#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_A >= 4
1592template <
class FUNC,
class ARGS_01,
1596struct Function_InvokerUtil_ResultType<FUNC, ARGS_01,
1600: Function_InvokerUtil_ResultTypeImp<void, FUNC, ARGS_01,
1607#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_A >= 5
1608template <
class FUNC,
class ARGS_01,
1613struct Function_InvokerUtil_ResultType<FUNC, ARGS_01,
1618: Function_InvokerUtil_ResultTypeImp<void, FUNC, ARGS_01,
1626#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_A >= 6
1627template <
class FUNC,
class ARGS_01,
1633struct Function_InvokerUtil_ResultType<FUNC, ARGS_01,
1639: Function_InvokerUtil_ResultTypeImp<void, FUNC, ARGS_01,
1648#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_A >= 7
1649template <
class FUNC,
class ARGS_01,
1656struct Function_InvokerUtil_ResultType<FUNC, ARGS_01,
1663: Function_InvokerUtil_ResultTypeImp<void, FUNC, ARGS_01,
1673#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_A >= 8
1674template <
class FUNC,
class ARGS_01,
1682struct Function_InvokerUtil_ResultType<FUNC, ARGS_01,
1690: Function_InvokerUtil_ResultTypeImp<void, FUNC, ARGS_01,
1701#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_A >= 9
1702template <
class FUNC,
class ARGS_01,
1711struct Function_InvokerUtil_ResultType<FUNC, ARGS_01,
1720: Function_InvokerUtil_ResultTypeImp<void, FUNC, ARGS_01,
1732#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_A >= 10
1733template <
class FUNC,
class ARGS_01,
1743struct Function_InvokerUtil_ResultType<FUNC, ARGS_01,
1753: Function_InvokerUtil_ResultTypeImp<void, FUNC, ARGS_01,
1766#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_A >= 11
1767template <
class FUNC,
class ARGS_01,
1778struct Function_InvokerUtil_ResultType<FUNC, ARGS_01,
1789: Function_InvokerUtil_ResultTypeImp<void, FUNC, ARGS_01,
1803#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_A >= 12
1804template <
class FUNC,
class ARGS_01,
1816struct Function_InvokerUtil_ResultType<FUNC, ARGS_01,
1828: Function_InvokerUtil_ResultTypeImp<void, FUNC, ARGS_01,
1843#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_A >= 13
1844template <
class FUNC,
class ARGS_01,
1857struct Function_InvokerUtil_ResultType<FUNC, ARGS_01,
1870: Function_InvokerUtil_ResultTypeImp<void, FUNC, ARGS_01,
1888#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_A >= 0
1889template <
class VOID_TYPE,
class FUNC>
1890struct Function_InvokerUtil_ResultTypeImp<VOID_TYPE, FUNC> {
1894#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_A >= 1
1895template <
class VOID_TYPE,
class FUNC,
class ARGS_01>
1896struct Function_InvokerUtil_ResultTypeImp<VOID_TYPE, FUNC, ARGS_01> {
1900#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_A >= 2
1901template <
class VOID_TYPE,
class FUNC,
class ARGS_01,
1903struct Function_InvokerUtil_ResultTypeImp<VOID_TYPE, FUNC, ARGS_01,
1908#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_A >= 3
1909template <
class VOID_TYPE,
class FUNC,
class ARGS_01,
1912struct Function_InvokerUtil_ResultTypeImp<VOID_TYPE, FUNC, ARGS_01,
1918#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_A >= 4
1919template <
class VOID_TYPE,
class FUNC,
class ARGS_01,
1923struct Function_InvokerUtil_ResultTypeImp<VOID_TYPE, FUNC, ARGS_01,
1930#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_A >= 5
1931template <
class VOID_TYPE,
class FUNC,
class ARGS_01,
1936struct Function_InvokerUtil_ResultTypeImp<VOID_TYPE, FUNC, ARGS_01,
1944#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_A >= 6
1945template <
class VOID_TYPE,
class FUNC,
class ARGS_01,
1951struct Function_InvokerUtil_ResultTypeImp<VOID_TYPE, FUNC, ARGS_01,
1960#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_A >= 7
1961template <
class VOID_TYPE,
class FUNC,
class ARGS_01,
1968struct Function_InvokerUtil_ResultTypeImp<VOID_TYPE, FUNC, ARGS_01,
1978#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_A >= 8
1979template <
class VOID_TYPE,
class FUNC,
class ARGS_01,
1987struct Function_InvokerUtil_ResultTypeImp<VOID_TYPE, FUNC, ARGS_01,
1998#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_A >= 9
1999template <
class VOID_TYPE,
class FUNC,
class ARGS_01,
2008struct Function_InvokerUtil_ResultTypeImp<VOID_TYPE, FUNC, ARGS_01,
2020#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_A >= 10
2021template <
class VOID_TYPE,
class FUNC,
class ARGS_01,
2031struct Function_InvokerUtil_ResultTypeImp<VOID_TYPE, FUNC, ARGS_01,
2044#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_A >= 11
2045template <
class VOID_TYPE,
class FUNC,
class ARGS_01,
2056struct Function_InvokerUtil_ResultTypeImp<VOID_TYPE, FUNC, ARGS_01,
2070#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_A >= 12
2071template <
class VOID_TYPE,
class FUNC,
class ARGS_01,
2083struct Function_InvokerUtil_ResultTypeImp<VOID_TYPE, FUNC, ARGS_01,
2098#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_A >= 13
2099template <
class VOID_TYPE,
class FUNC,
class ARGS_01,
2112struct Function_InvokerUtil_ResultTypeImp<VOID_TYPE, FUNC, ARGS_01,
2129#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_A >= 0
2130template <
class FUNC>
2131struct Function_InvokerUtil_ResultTypeImp<
2132 typename
bslmf::VoidType<
2136 typename bsl::add_lvalue_reference<typename bslalg::NothrowMovableUtil::
2137 UnwrappedType<FUNC>::type>::type> {
2142#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_A >= 1
2143template <
class FUNC,
class ARGS_01>
2144struct Function_InvokerUtil_ResultTypeImp<
2145 typename
bslmf::VoidType<
2146 typename Function_InvokerUtil_ForwardType<ARGS_01>::Type>::type,
2150 typename bsl::add_lvalue_reference<typename bslalg::NothrowMovableUtil::
2151 UnwrappedType<FUNC>::type>::type,
2152 typename Function_InvokerUtil_ForwardType<ARGS_01>::Type> {
2157#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_A >= 2
2158template <
class FUNC,
class ARGS_01,
2160struct Function_InvokerUtil_ResultTypeImp<
2161 typename
bslmf::VoidType<
2162 typename Function_InvokerUtil_ForwardType<ARGS_01>::Type,
2163 typename Function_InvokerUtil_ForwardType<ARGS_02>::Type>::type,
2168 typename bsl::add_lvalue_reference<typename bslalg::NothrowMovableUtil::
2169 UnwrappedType<FUNC>::type>::type,
2170 typename Function_InvokerUtil_ForwardType<ARGS_01>::Type,
2171 typename Function_InvokerUtil_ForwardType<ARGS_02>::Type> {
2176#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_A >= 3
2177template <
class FUNC,
class ARGS_01,
2180struct Function_InvokerUtil_ResultTypeImp<
2181 typename
bslmf::VoidType<
2182 typename Function_InvokerUtil_ForwardType<ARGS_01>::Type,
2183 typename Function_InvokerUtil_ForwardType<ARGS_02>::Type,
2184 typename Function_InvokerUtil_ForwardType<ARGS_03>::Type>::type,
2190 typename bsl::add_lvalue_reference<typename bslalg::NothrowMovableUtil::
2191 UnwrappedType<FUNC>::type>::type,
2192 typename Function_InvokerUtil_ForwardType<ARGS_01>::Type,
2193 typename Function_InvokerUtil_ForwardType<ARGS_02>::Type,
2194 typename Function_InvokerUtil_ForwardType<ARGS_03>::Type> {
2199#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_A >= 4
2200template <
class FUNC,
class ARGS_01,
2204struct Function_InvokerUtil_ResultTypeImp<
2205 typename
bslmf::VoidType<
2206 typename Function_InvokerUtil_ForwardType<ARGS_01>::Type,
2207 typename Function_InvokerUtil_ForwardType<ARGS_02>::Type,
2208 typename Function_InvokerUtil_ForwardType<ARGS_03>::Type,
2209 typename Function_InvokerUtil_ForwardType<ARGS_04>::Type>::type,
2216 typename bsl::add_lvalue_reference<typename bslalg::NothrowMovableUtil::
2217 UnwrappedType<FUNC>::type>::type,
2218 typename Function_InvokerUtil_ForwardType<ARGS_01>::Type,
2219 typename Function_InvokerUtil_ForwardType<ARGS_02>::Type,
2220 typename Function_InvokerUtil_ForwardType<ARGS_03>::Type,
2221 typename Function_InvokerUtil_ForwardType<ARGS_04>::Type> {
2226#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_A >= 5
2227template <
class FUNC,
class ARGS_01,
2232struct Function_InvokerUtil_ResultTypeImp<
2233 typename
bslmf::VoidType<
2234 typename Function_InvokerUtil_ForwardType<ARGS_01>::Type,
2235 typename Function_InvokerUtil_ForwardType<ARGS_02>::Type,
2236 typename Function_InvokerUtil_ForwardType<ARGS_03>::Type,
2237 typename Function_InvokerUtil_ForwardType<ARGS_04>::Type,
2238 typename Function_InvokerUtil_ForwardType<ARGS_05>::Type>::type,
2246 typename bsl::add_lvalue_reference<typename bslalg::NothrowMovableUtil::
2247 UnwrappedType<FUNC>::type>::type,
2248 typename Function_InvokerUtil_ForwardType<ARGS_01>::Type,
2249 typename Function_InvokerUtil_ForwardType<ARGS_02>::Type,
2250 typename Function_InvokerUtil_ForwardType<ARGS_03>::Type,
2251 typename Function_InvokerUtil_ForwardType<ARGS_04>::Type,
2252 typename Function_InvokerUtil_ForwardType<ARGS_05>::Type> {
2257#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_A >= 6
2258template <
class FUNC,
class ARGS_01,
2264struct Function_InvokerUtil_ResultTypeImp<
2265 typename
bslmf::VoidType<
2266 typename Function_InvokerUtil_ForwardType<ARGS_01>::Type,
2267 typename Function_InvokerUtil_ForwardType<ARGS_02>::Type,
2268 typename Function_InvokerUtil_ForwardType<ARGS_03>::Type,
2269 typename Function_InvokerUtil_ForwardType<ARGS_04>::Type,
2270 typename Function_InvokerUtil_ForwardType<ARGS_05>::Type,
2271 typename Function_InvokerUtil_ForwardType<ARGS_06>::Type>::type,
2280 typename bsl::add_lvalue_reference<typename bslalg::NothrowMovableUtil::
2281 UnwrappedType<FUNC>::type>::type,
2282 typename Function_InvokerUtil_ForwardType<ARGS_01>::Type,
2283 typename Function_InvokerUtil_ForwardType<ARGS_02>::Type,
2284 typename Function_InvokerUtil_ForwardType<ARGS_03>::Type,
2285 typename Function_InvokerUtil_ForwardType<ARGS_04>::Type,
2286 typename Function_InvokerUtil_ForwardType<ARGS_05>::Type,
2287 typename Function_InvokerUtil_ForwardType<ARGS_06>::Type> {
2292#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_A >= 7
2293template <
class FUNC,
class ARGS_01,
2300struct Function_InvokerUtil_ResultTypeImp<
2301 typename
bslmf::VoidType<
2302 typename Function_InvokerUtil_ForwardType<ARGS_01>::Type,
2303 typename Function_InvokerUtil_ForwardType<ARGS_02>::Type,
2304 typename Function_InvokerUtil_ForwardType<ARGS_03>::Type,
2305 typename Function_InvokerUtil_ForwardType<ARGS_04>::Type,
2306 typename Function_InvokerUtil_ForwardType<ARGS_05>::Type,
2307 typename Function_InvokerUtil_ForwardType<ARGS_06>::Type,
2308 typename Function_InvokerUtil_ForwardType<ARGS_07>::Type>::type,
2318 typename bsl::add_lvalue_reference<typename bslalg::NothrowMovableUtil::
2319 UnwrappedType<FUNC>::type>::type,
2320 typename Function_InvokerUtil_ForwardType<ARGS_01>::Type,
2321 typename Function_InvokerUtil_ForwardType<ARGS_02>::Type,
2322 typename Function_InvokerUtil_ForwardType<ARGS_03>::Type,
2323 typename Function_InvokerUtil_ForwardType<ARGS_04>::Type,
2324 typename Function_InvokerUtil_ForwardType<ARGS_05>::Type,
2325 typename Function_InvokerUtil_ForwardType<ARGS_06>::Type,
2326 typename Function_InvokerUtil_ForwardType<ARGS_07>::Type> {
2331#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_A >= 8
2332template <
class FUNC,
class ARGS_01,
2340struct Function_InvokerUtil_ResultTypeImp<
2341 typename
bslmf::VoidType<
2342 typename Function_InvokerUtil_ForwardType<ARGS_01>::Type,
2343 typename Function_InvokerUtil_ForwardType<ARGS_02>::Type,
2344 typename Function_InvokerUtil_ForwardType<ARGS_03>::Type,
2345 typename Function_InvokerUtil_ForwardType<ARGS_04>::Type,
2346 typename Function_InvokerUtil_ForwardType<ARGS_05>::Type,
2347 typename Function_InvokerUtil_ForwardType<ARGS_06>::Type,
2348 typename Function_InvokerUtil_ForwardType<ARGS_07>::Type,
2349 typename Function_InvokerUtil_ForwardType<ARGS_08>::Type>::type,
2360 typename bsl::add_lvalue_reference<typename bslalg::NothrowMovableUtil::
2361 UnwrappedType<FUNC>::type>::type,
2362 typename Function_InvokerUtil_ForwardType<ARGS_01>::Type,
2363 typename Function_InvokerUtil_ForwardType<ARGS_02>::Type,
2364 typename Function_InvokerUtil_ForwardType<ARGS_03>::Type,
2365 typename Function_InvokerUtil_ForwardType<ARGS_04>::Type,
2366 typename Function_InvokerUtil_ForwardType<ARGS_05>::Type,
2367 typename Function_InvokerUtil_ForwardType<ARGS_06>::Type,
2368 typename Function_InvokerUtil_ForwardType<ARGS_07>::Type,
2369 typename Function_InvokerUtil_ForwardType<ARGS_08>::Type> {
2374#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_A >= 9
2375template <
class FUNC,
class ARGS_01,
2384struct Function_InvokerUtil_ResultTypeImp<
2385 typename
bslmf::VoidType<
2386 typename Function_InvokerUtil_ForwardType<ARGS_01>::Type,
2387 typename Function_InvokerUtil_ForwardType<ARGS_02>::Type,
2388 typename Function_InvokerUtil_ForwardType<ARGS_03>::Type,
2389 typename Function_InvokerUtil_ForwardType<ARGS_04>::Type,
2390 typename Function_InvokerUtil_ForwardType<ARGS_05>::Type,
2391 typename Function_InvokerUtil_ForwardType<ARGS_06>::Type,
2392 typename Function_InvokerUtil_ForwardType<ARGS_07>::Type,
2393 typename Function_InvokerUtil_ForwardType<ARGS_08>::Type,
2394 typename Function_InvokerUtil_ForwardType<ARGS_09>::Type>::type,
2406 typename bsl::add_lvalue_reference<typename bslalg::NothrowMovableUtil::
2407 UnwrappedType<FUNC>::type>::type,
2408 typename Function_InvokerUtil_ForwardType<ARGS_01>::Type,
2409 typename Function_InvokerUtil_ForwardType<ARGS_02>::Type,
2410 typename Function_InvokerUtil_ForwardType<ARGS_03>::Type,
2411 typename Function_InvokerUtil_ForwardType<ARGS_04>::Type,
2412 typename Function_InvokerUtil_ForwardType<ARGS_05>::Type,
2413 typename Function_InvokerUtil_ForwardType<ARGS_06>::Type,
2414 typename Function_InvokerUtil_ForwardType<ARGS_07>::Type,
2415 typename Function_InvokerUtil_ForwardType<ARGS_08>::Type,
2416 typename Function_InvokerUtil_ForwardType<ARGS_09>::Type> {
2421#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_A >= 10
2422template <
class FUNC,
class ARGS_01,
2432struct Function_InvokerUtil_ResultTypeImp<
2433 typename
bslmf::VoidType<
2434 typename Function_InvokerUtil_ForwardType<ARGS_01>::Type,
2435 typename Function_InvokerUtil_ForwardType<ARGS_02>::Type,
2436 typename Function_InvokerUtil_ForwardType<ARGS_03>::Type,
2437 typename Function_InvokerUtil_ForwardType<ARGS_04>::Type,
2438 typename Function_InvokerUtil_ForwardType<ARGS_05>::Type,
2439 typename Function_InvokerUtil_ForwardType<ARGS_06>::Type,
2440 typename Function_InvokerUtil_ForwardType<ARGS_07>::Type,
2441 typename Function_InvokerUtil_ForwardType<ARGS_08>::Type,
2442 typename Function_InvokerUtil_ForwardType<ARGS_09>::Type,
2443 typename Function_InvokerUtil_ForwardType<ARGS_10>::Type>::type,
2456 typename bsl::add_lvalue_reference<typename bslalg::NothrowMovableUtil::
2457 UnwrappedType<FUNC>::type>::type,
2458 typename Function_InvokerUtil_ForwardType<ARGS_01>::Type,
2459 typename Function_InvokerUtil_ForwardType<ARGS_02>::Type,
2460 typename Function_InvokerUtil_ForwardType<ARGS_03>::Type,
2461 typename Function_InvokerUtil_ForwardType<ARGS_04>::Type,
2462 typename Function_InvokerUtil_ForwardType<ARGS_05>::Type,
2463 typename Function_InvokerUtil_ForwardType<ARGS_06>::Type,
2464 typename Function_InvokerUtil_ForwardType<ARGS_07>::Type,
2465 typename Function_InvokerUtil_ForwardType<ARGS_08>::Type,
2466 typename Function_InvokerUtil_ForwardType<ARGS_09>::Type,
2467 typename Function_InvokerUtil_ForwardType<ARGS_10>::Type> {
2472#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_A >= 11
2473template <
class FUNC,
class ARGS_01,
2484struct Function_InvokerUtil_ResultTypeImp<
2485 typename
bslmf::VoidType<
2486 typename Function_InvokerUtil_ForwardType<ARGS_01>::Type,
2487 typename Function_InvokerUtil_ForwardType<ARGS_02>::Type,
2488 typename Function_InvokerUtil_ForwardType<ARGS_03>::Type,
2489 typename Function_InvokerUtil_ForwardType<ARGS_04>::Type,
2490 typename Function_InvokerUtil_ForwardType<ARGS_05>::Type,
2491 typename Function_InvokerUtil_ForwardType<ARGS_06>::Type,
2492 typename Function_InvokerUtil_ForwardType<ARGS_07>::Type,
2493 typename Function_InvokerUtil_ForwardType<ARGS_08>::Type,
2494 typename Function_InvokerUtil_ForwardType<ARGS_09>::Type,
2495 typename Function_InvokerUtil_ForwardType<ARGS_10>::Type,
2496 typename Function_InvokerUtil_ForwardType<ARGS_11>::Type>::type,
2510 typename bsl::add_lvalue_reference<typename bslalg::NothrowMovableUtil::
2511 UnwrappedType<FUNC>::type>::type,
2512 typename Function_InvokerUtil_ForwardType<ARGS_01>::Type,
2513 typename Function_InvokerUtil_ForwardType<ARGS_02>::Type,
2514 typename Function_InvokerUtil_ForwardType<ARGS_03>::Type,
2515 typename Function_InvokerUtil_ForwardType<ARGS_04>::Type,
2516 typename Function_InvokerUtil_ForwardType<ARGS_05>::Type,
2517 typename Function_InvokerUtil_ForwardType<ARGS_06>::Type,
2518 typename Function_InvokerUtil_ForwardType<ARGS_07>::Type,
2519 typename Function_InvokerUtil_ForwardType<ARGS_08>::Type,
2520 typename Function_InvokerUtil_ForwardType<ARGS_09>::Type,
2521 typename Function_InvokerUtil_ForwardType<ARGS_10>::Type,
2522 typename Function_InvokerUtil_ForwardType<ARGS_11>::Type> {
2527#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_A >= 12
2528template <
class FUNC,
class ARGS_01,
2540struct Function_InvokerUtil_ResultTypeImp<
2541 typename
bslmf::VoidType<
2542 typename Function_InvokerUtil_ForwardType<ARGS_01>::Type,
2543 typename Function_InvokerUtil_ForwardType<ARGS_02>::Type,
2544 typename Function_InvokerUtil_ForwardType<ARGS_03>::Type,
2545 typename Function_InvokerUtil_ForwardType<ARGS_04>::Type,
2546 typename Function_InvokerUtil_ForwardType<ARGS_05>::Type,
2547 typename Function_InvokerUtil_ForwardType<ARGS_06>::Type,
2548 typename Function_InvokerUtil_ForwardType<ARGS_07>::Type,
2549 typename Function_InvokerUtil_ForwardType<ARGS_08>::Type,
2550 typename Function_InvokerUtil_ForwardType<ARGS_09>::Type,
2551 typename Function_InvokerUtil_ForwardType<ARGS_10>::Type,
2552 typename Function_InvokerUtil_ForwardType<ARGS_11>::Type,
2553 typename Function_InvokerUtil_ForwardType<ARGS_12>::Type>::type,
2568 typename bsl::add_lvalue_reference<typename bslalg::NothrowMovableUtil::
2569 UnwrappedType<FUNC>::type>::type,
2570 typename Function_InvokerUtil_ForwardType<ARGS_01>::Type,
2571 typename Function_InvokerUtil_ForwardType<ARGS_02>::Type,
2572 typename Function_InvokerUtil_ForwardType<ARGS_03>::Type,
2573 typename Function_InvokerUtil_ForwardType<ARGS_04>::Type,
2574 typename Function_InvokerUtil_ForwardType<ARGS_05>::Type,
2575 typename Function_InvokerUtil_ForwardType<ARGS_06>::Type,
2576 typename Function_InvokerUtil_ForwardType<ARGS_07>::Type,
2577 typename Function_InvokerUtil_ForwardType<ARGS_08>::Type,
2578 typename Function_InvokerUtil_ForwardType<ARGS_09>::Type,
2579 typename Function_InvokerUtil_ForwardType<ARGS_10>::Type,
2580 typename Function_InvokerUtil_ForwardType<ARGS_11>::Type,
2581 typename Function_InvokerUtil_ForwardType<ARGS_12>::Type> {
2586#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_A >= 13
2587template <
class FUNC,
class ARGS_01,
2600struct Function_InvokerUtil_ResultTypeImp<
2601 typename
bslmf::VoidType<
2602 typename Function_InvokerUtil_ForwardType<ARGS_01>::Type,
2603 typename Function_InvokerUtil_ForwardType<ARGS_02>::Type,
2604 typename Function_InvokerUtil_ForwardType<ARGS_03>::Type,
2605 typename Function_InvokerUtil_ForwardType<ARGS_04>::Type,
2606 typename Function_InvokerUtil_ForwardType<ARGS_05>::Type,
2607 typename Function_InvokerUtil_ForwardType<ARGS_06>::Type,
2608 typename Function_InvokerUtil_ForwardType<ARGS_07>::Type,
2609 typename Function_InvokerUtil_ForwardType<ARGS_08>::Type,
2610 typename Function_InvokerUtil_ForwardType<ARGS_09>::Type,
2611 typename Function_InvokerUtil_ForwardType<ARGS_10>::Type,
2612 typename Function_InvokerUtil_ForwardType<ARGS_11>::Type,
2613 typename Function_InvokerUtil_ForwardType<ARGS_12>::Type,
2614 typename Function_InvokerUtil_ForwardType<ARGS_13>::Type>::type,
2630 typename bsl::add_lvalue_reference<typename bslalg::NothrowMovableUtil::
2631 UnwrappedType<FUNC>::type>::type,
2632 typename Function_InvokerUtil_ForwardType<ARGS_01>::Type,
2633 typename Function_InvokerUtil_ForwardType<ARGS_02>::Type,
2634 typename Function_InvokerUtil_ForwardType<ARGS_03>::Type,
2635 typename Function_InvokerUtil_ForwardType<ARGS_04>::Type,
2636 typename Function_InvokerUtil_ForwardType<ARGS_05>::Type,
2637 typename Function_InvokerUtil_ForwardType<ARGS_06>::Type,
2638 typename Function_InvokerUtil_ForwardType<ARGS_07>::Type,
2639 typename Function_InvokerUtil_ForwardType<ARGS_08>::Type,
2640 typename Function_InvokerUtil_ForwardType<ARGS_09>::Type,
2641 typename Function_InvokerUtil_ForwardType<ARGS_10>::Type,
2642 typename Function_InvokerUtil_ForwardType<ARGS_11>::Type,
2643 typename Function_InvokerUtil_ForwardType<ARGS_12>::Type,
2644 typename Function_InvokerUtil_ForwardType<ARGS_13>::Type> {
2651template <
class VOID_TYPE,
class ARG>
2652struct Function_InvokerUtil_ForwardTypeImp;
2655struct Function_InvokerUtil_ForwardType
2656: Function_InvokerUtil_ForwardTypeImp<void, ARG> {
2660template <
class VOID_TYPE,
class ARG>
2661struct Function_InvokerUtil_ForwardTypeImp {
2665struct Function_InvokerUtil_ForwardTypeImp<
2666 typename
bslmf::VoidType<decltype(
2667 bslmf::ForwardingTypeUtil<ARG>::forwardToTarget(
2668 std::declval<typename bsl::add_lvalue_reference<
2669 typename bslmf::ForwardingType<ARG>::Type>::type>()))>::type,
2679template <
class VOID_TYPE,
class FROM,
class TO>
2680struct Function_InvokerUtil_IsExplicitlyConvertibleImp;
2682template <
class FROM,
class TO>
2683struct Function_InvokerUtil_IsExplicitlyConvertible
2684: Function_InvokerUtil_IsExplicitlyConvertibleImp<void, FROM, TO> {
2687template <
class FROM_TO>
2688struct Function_InvokerUtil_IsExplicitlyConvertible<FROM_TO, FROM_TO>
2693template <
class VOID_TYPE,
class FROM,
class TO>
2694struct Function_InvokerUtil_IsExplicitlyConvertibleImp :
bsl::false_type {
2697template <
class FROM,
class TO>
2698struct Function_InvokerUtil_IsExplicitlyConvertibleImp<
2699 typename
bslmf::VoidType<decltype(
2700 static_cast<TO>(std::declval<FROM>()))>::type,
2711#ifdef BSLSTL_FUNCTION_INVOKERUTIL_SUPPORT_IS_FUNC_INVOCABLE
2713template <
class VOID_TYPE,
class RET,
class FUNC,
class... ARGS>
2714struct Function_InvokerUtil_IsFuncInvocableImp;
2716template <
class RET,
class FUNC,
class... ARGS>
2717struct Function_InvokerUtil_IsFuncInvocable<RET(ARGS...), FUNC>
2718: Function_InvokerUtil_IsFuncInvocableImp<void, RET, FUNC, ARGS...> {
2723struct Function_InvokerUtil_ForwardType;
2725template <
class FROM,
class TO>
2726struct Function_InvokerUtil_IsExplicitlyConvertible;
2728template <
class FUNC,
class... ARGS>
2729struct Function_InvokerUtil_ResultType;
2731template <
class VOID_TYPE,
class RET,
class FUNC,
class... ARGS>
2735template <
class RET,
class FUNC,
class... ARGS>
2736struct Function_InvokerUtil_IsFuncInvocableImp<
2737 typename
bslmf::VoidType<
2738 typename Function_InvokerUtil_ResultType<FUNC, ARGS...>::type>::type,
2743 bsl::is_void<RET>::value,
2745 Function_InvokerUtil_IsExplicitlyConvertible<
2746 typename Function_InvokerUtil_ResultType<FUNC, ARGS...>::type,
2751template <
class VOID_TYPE,
class FUNC,
class... ARGS>
2752struct Function_InvokerUtil_ResultTypeImp;
2754template <
class FUNC,
class... ARGS>
2755struct Function_InvokerUtil_ResultType
2756: Function_InvokerUtil_ResultTypeImp<void, FUNC, ARGS...> {
2760template <
class VOID_TYPE,
class FUNC,
class... ARGS>
2761struct Function_InvokerUtil_ResultTypeImp {
2764template <
class FUNC,
class... ARGS>
2765struct Function_InvokerUtil_ResultTypeImp<
2766 typename
bslmf::VoidType<
2767 typename Function_InvokerUtil_ForwardType<ARGS>::Type...>::type,
2771 typename bsl::add_lvalue_reference<typename bslalg::NothrowMovableUtil::
2772 UnwrappedType<FUNC>::type>::type,
2773 typename Function_InvokerUtil_ForwardType<ARGS>::Type...> {
2778template <
class VOID_TYPE,
class ARG>
2779struct Function_InvokerUtil_ForwardTypeImp;
2782struct Function_InvokerUtil_ForwardType
2783: Function_InvokerUtil_ForwardTypeImp<void, ARG> {
2787template <
class VOID_TYPE,
class ARG>
2788struct Function_InvokerUtil_ForwardTypeImp {
2792struct Function_InvokerUtil_ForwardTypeImp<
2793 typename
bslmf::VoidType<decltype(
2794 bslmf::ForwardingTypeUtil<ARG>::forwardToTarget(
2795 std::declval<typename bsl::add_lvalue_reference<
2796 typename bslmf::ForwardingType<ARG>::Type>::type>()))>::type,
2806template <
class VOID_TYPE,
class FROM,
class TO>
2807struct Function_InvokerUtil_IsExplicitlyConvertibleImp;
2809template <
class FROM,
class TO>
2810struct Function_InvokerUtil_IsExplicitlyConvertible
2811: Function_InvokerUtil_IsExplicitlyConvertibleImp<void, FROM, TO> {
2814template <
class FROM_TO>
2815struct Function_InvokerUtil_IsExplicitlyConvertible<FROM_TO, FROM_TO>
2820template <
class VOID_TYPE,
class FROM,
class TO>
2821struct Function_InvokerUtil_IsExplicitlyConvertibleImp :
bsl::false_type {
2824template <
class FROM,
class TO>
2825struct Function_InvokerUtil_IsExplicitlyConvertibleImp<
2826 typename
bslmf::VoidType<decltype(
2827 static_cast<TO>(std::declval<FROM>()))>::type,
2849template <
int INVOCATION_TYPE,
class PROTOTYPE,
class FUNC>
2850struct Function_InvokerUtil_Dispatch;
2852#if BSLS_COMPILERFEATURES_SIMULATE_VARIADIC_TEMPLATES
2855#ifndef BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT
2856#define BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT 13
2858#ifndef BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_B
2859#define BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_B BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT
2863#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_B >= 0
2864template <
class FUNC,
class RET>
2865struct Function_InvokerUtil_Dispatch<Function_InvokerUtil::e_FunctionPtr,
2869 static RET invoke(
const Function_Rep *rep);
2873#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_B >= 1
2874template <
class FUNC,
class RET,
class ARGS_01>
2875struct Function_InvokerUtil_Dispatch<Function_InvokerUtil::e_FunctionPtr,
2876 RET(ARGS_01), FUNC> {
2879 static RET invoke(
const Function_Rep *rep,
2884#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_B >= 2
2885template <
class FUNC,
class RET,
class ARGS_01,
2887struct Function_InvokerUtil_Dispatch<Function_InvokerUtil::e_FunctionPtr,
2892 static RET invoke(
const Function_Rep *rep,
2898#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_B >= 3
2899template <
class FUNC,
class RET,
class ARGS_01,
2902struct Function_InvokerUtil_Dispatch<Function_InvokerUtil::e_FunctionPtr,
2908 static RET invoke(
const Function_Rep *rep,
2915#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_B >= 4
2916template <
class FUNC,
class RET,
class ARGS_01,
2920struct Function_InvokerUtil_Dispatch<Function_InvokerUtil::e_FunctionPtr,
2927 static RET invoke(
const Function_Rep *rep,
2935#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_B >= 5
2936template <
class FUNC,
class RET,
class ARGS_01,
2941struct Function_InvokerUtil_Dispatch<Function_InvokerUtil::e_FunctionPtr,
2949 static RET invoke(
const Function_Rep *rep,
2958#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_B >= 6
2959template <
class FUNC,
class RET,
class ARGS_01,
2965struct Function_InvokerUtil_Dispatch<Function_InvokerUtil::e_FunctionPtr,
2974 static RET invoke(
const Function_Rep *rep,
2984#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_B >= 7
2985template <
class FUNC,
class RET,
class ARGS_01,
2992struct Function_InvokerUtil_Dispatch<Function_InvokerUtil::e_FunctionPtr,
3002 static RET invoke(
const Function_Rep *rep,
3013#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_B >= 8
3014template <
class FUNC,
class RET,
class ARGS_01,
3022struct Function_InvokerUtil_Dispatch<Function_InvokerUtil::e_FunctionPtr,
3033 static RET invoke(
const Function_Rep *rep,
3045#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_B >= 9
3046template <
class FUNC,
class RET,
class ARGS_01,
3055struct Function_InvokerUtil_Dispatch<Function_InvokerUtil::e_FunctionPtr,
3067 static RET invoke(
const Function_Rep *rep,
3080#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_B >= 10
3081template <
class FUNC,
class RET,
class ARGS_01,
3091struct Function_InvokerUtil_Dispatch<Function_InvokerUtil::e_FunctionPtr,
3104 static RET invoke(
const Function_Rep *rep,
3118#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_B >= 11
3119template <
class FUNC,
class RET,
class ARGS_01,
3130struct Function_InvokerUtil_Dispatch<Function_InvokerUtil::e_FunctionPtr,
3144 static RET invoke(
const Function_Rep *rep,
3159#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_B >= 12
3160template <
class FUNC,
class RET,
class ARGS_01,
3172struct Function_InvokerUtil_Dispatch<Function_InvokerUtil::e_FunctionPtr,
3187 static RET invoke(
const Function_Rep *rep,
3203#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_B >= 13
3204template <
class FUNC,
class RET,
class ARGS_01,
3217struct Function_InvokerUtil_Dispatch<Function_InvokerUtil::e_FunctionPtr,
3233 static RET invoke(
const Function_Rep *rep,
3251#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_B >= 0
3252template <
class FUNC,
class RET,
class ARG0>
3253struct Function_InvokerUtil_Dispatch<Function_InvokerUtil::e_MemFunctionPtr,
3268 static RET invoke(
const Function_Rep *rep,
3273#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_B >= 1
3274template <
class FUNC,
class RET,
class ARG0,
class ARGS_01>
3275struct Function_InvokerUtil_Dispatch<Function_InvokerUtil::e_MemFunctionPtr,
3276 RET(ARG0, ARGS_01), FUNC> {
3292 static RET invoke(
const Function_Rep *rep,
3298#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_B >= 2
3299template <
class FUNC,
class RET,
class ARG0,
class ARGS_01,
3301struct Function_InvokerUtil_Dispatch<Function_InvokerUtil::e_MemFunctionPtr,
3321 static RET invoke(
const Function_Rep *rep,
3328#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_B >= 3
3329template <
class FUNC,
class RET,
class ARG0,
class ARGS_01,
3332struct Function_InvokerUtil_Dispatch<Function_InvokerUtil::e_MemFunctionPtr,
3355 static RET invoke(
const Function_Rep *rep,
3363#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_B >= 4
3364template <
class FUNC,
class RET,
class ARG0,
class ARGS_01,
3368struct Function_InvokerUtil_Dispatch<Function_InvokerUtil::e_MemFunctionPtr,
3394 static RET invoke(
const Function_Rep *rep,
3403#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_B >= 5
3404template <
class FUNC,
class RET,
class ARG0,
class ARGS_01,
3409struct Function_InvokerUtil_Dispatch<Function_InvokerUtil::e_MemFunctionPtr,
3438 static RET invoke(
const Function_Rep *rep,
3448#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_B >= 6
3449template <
class FUNC,
class RET,
class ARG0,
class ARGS_01,
3455struct Function_InvokerUtil_Dispatch<Function_InvokerUtil::e_MemFunctionPtr,
3487 static RET invoke(
const Function_Rep *rep,
3498#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_B >= 7
3499template <
class FUNC,
class RET,
class ARG0,
class ARGS_01,
3506struct Function_InvokerUtil_Dispatch<Function_InvokerUtil::e_MemFunctionPtr,
3541 static RET invoke(
const Function_Rep *rep,
3553#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_B >= 8
3554template <
class FUNC,
class RET,
class ARG0,
class ARGS_01,
3562struct Function_InvokerUtil_Dispatch<Function_InvokerUtil::e_MemFunctionPtr,
3600 static RET invoke(
const Function_Rep *rep,
3613#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_B >= 9
3614template <
class FUNC,
class RET,
class ARG0,
class ARGS_01,
3623struct Function_InvokerUtil_Dispatch<Function_InvokerUtil::e_MemFunctionPtr,
3664 static RET invoke(
const Function_Rep *rep,
3678#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_B >= 10
3679template <
class FUNC,
class RET,
class ARG0,
class ARGS_01,
3689struct Function_InvokerUtil_Dispatch<Function_InvokerUtil::e_MemFunctionPtr,
3733 static RET invoke(
const Function_Rep *rep,
3748#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_B >= 11
3749template <
class FUNC,
class RET,
class ARG0,
class ARGS_01,
3760struct Function_InvokerUtil_Dispatch<Function_InvokerUtil::e_MemFunctionPtr,
3807 static RET invoke(
const Function_Rep *rep,
3823#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_B >= 12
3824template <
class FUNC,
class RET,
class ARG0,
class ARGS_01,
3836struct Function_InvokerUtil_Dispatch<Function_InvokerUtil::e_MemFunctionPtr,
3886 static RET invoke(
const Function_Rep *rep,
3903#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_B >= 13
3904template <
class FUNC,
class RET,
class ARG0,
class ARGS_01,
3917struct Function_InvokerUtil_Dispatch<Function_InvokerUtil::e_MemFunctionPtr,
3970 static RET invoke(
const Function_Rep *rep,
3989template <
class MEMBER_TYPE,
class CLASS_TYPE,
class RET,
class ARG0>
3990struct Function_InvokerUtil_Dispatch<Function_InvokerUtil::e_MemDataPtr,
3991 RET(ARG0), MEMBER_TYPE CLASS_TYPE::*> {
3993 typedef MEMBER_TYPE CLASS_TYPE::* Func;
4005 static RET invoke(
const Function_Rep *rep,
4009#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_B >= 0
4010template <
class FUNC,
class RET>
4011struct Function_InvokerUtil_Dispatch<Function_InvokerUtil::e_InplaceFunctor,
4015 static RET invoke(
const Function_Rep *rep);
4019#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_B >= 1
4020template <
class FUNC,
class RET,
class ARGS_01>
4021struct Function_InvokerUtil_Dispatch<Function_InvokerUtil::e_InplaceFunctor,
4022 RET(ARGS_01), FUNC> {
4025 static RET invoke(
const Function_Rep *rep,
4030#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_B >= 2
4031template <
class FUNC,
class RET,
class ARGS_01,
4033struct Function_InvokerUtil_Dispatch<Function_InvokerUtil::e_InplaceFunctor,
4038 static RET invoke(
const Function_Rep *rep,
4044#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_B >= 3
4045template <
class FUNC,
class RET,
class ARGS_01,
4048struct Function_InvokerUtil_Dispatch<Function_InvokerUtil::e_InplaceFunctor,
4054 static RET invoke(
const Function_Rep *rep,
4061#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_B >= 4
4062template <
class FUNC,
class RET,
class ARGS_01,
4066struct Function_InvokerUtil_Dispatch<Function_InvokerUtil::e_InplaceFunctor,
4073 static RET invoke(
const Function_Rep *rep,
4081#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_B >= 5
4082template <
class FUNC,
class RET,
class ARGS_01,
4087struct Function_InvokerUtil_Dispatch<Function_InvokerUtil::e_InplaceFunctor,
4095 static RET invoke(
const Function_Rep *rep,
4104#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_B >= 6
4105template <
class FUNC,
class RET,
class ARGS_01,
4111struct Function_InvokerUtil_Dispatch<Function_InvokerUtil::e_InplaceFunctor,
4120 static RET invoke(
const Function_Rep *rep,
4130#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_B >= 7
4131template <
class FUNC,
class RET,
class ARGS_01,
4138struct Function_InvokerUtil_Dispatch<Function_InvokerUtil::e_InplaceFunctor,
4148 static RET invoke(
const Function_Rep *rep,
4159#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_B >= 8
4160template <
class FUNC,
class RET,
class ARGS_01,
4168struct Function_InvokerUtil_Dispatch<Function_InvokerUtil::e_InplaceFunctor,
4179 static RET invoke(
const Function_Rep *rep,
4191#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_B >= 9
4192template <
class FUNC,
class RET,
class ARGS_01,
4201struct Function_InvokerUtil_Dispatch<Function_InvokerUtil::e_InplaceFunctor,
4213 static RET invoke(
const Function_Rep *rep,
4226#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_B >= 10
4227template <
class FUNC,
class RET,
class ARGS_01,
4237struct Function_InvokerUtil_Dispatch<Function_InvokerUtil::e_InplaceFunctor,
4250 static RET invoke(
const Function_Rep *rep,
4264#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_B >= 11
4265template <
class FUNC,
class RET,
class ARGS_01,
4276struct Function_InvokerUtil_Dispatch<Function_InvokerUtil::e_InplaceFunctor,
4290 static RET invoke(
const Function_Rep *rep,
4305#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_B >= 12
4306template <
class FUNC,
class RET,
class ARGS_01,
4318struct Function_InvokerUtil_Dispatch<Function_InvokerUtil::e_InplaceFunctor,
4333 static RET invoke(
const Function_Rep *rep,
4349#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_B >= 13
4350template <
class FUNC,
class RET,
class ARGS_01,
4363struct Function_InvokerUtil_Dispatch<Function_InvokerUtil::e_InplaceFunctor,
4379 static RET invoke(
const Function_Rep *rep,
4397#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_B >= 0
4398template <
class FUNC,
class RET>
4399struct Function_InvokerUtil_Dispatch<Function_InvokerUtil::e_OutofplaceFunctor,
4403 static RET invoke(
const Function_Rep *rep);
4407#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_B >= 1
4408template <
class FUNC,
class RET,
class ARGS_01>
4409struct Function_InvokerUtil_Dispatch<Function_InvokerUtil::e_OutofplaceFunctor,
4410 RET(ARGS_01), FUNC> {
4413 static RET invoke(
const Function_Rep *rep,
4418#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_B >= 2
4419template <
class FUNC,
class RET,
class ARGS_01,
4421struct Function_InvokerUtil_Dispatch<Function_InvokerUtil::e_OutofplaceFunctor,
4426 static RET invoke(
const Function_Rep *rep,
4432#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_B >= 3
4433template <
class FUNC,
class RET,
class ARGS_01,
4436struct Function_InvokerUtil_Dispatch<Function_InvokerUtil::e_OutofplaceFunctor,
4442 static RET invoke(
const Function_Rep *rep,
4449#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_B >= 4
4450template <
class FUNC,
class RET,
class ARGS_01,
4454struct Function_InvokerUtil_Dispatch<Function_InvokerUtil::e_OutofplaceFunctor,
4461 static RET invoke(
const Function_Rep *rep,
4469#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_B >= 5
4470template <
class FUNC,
class RET,
class ARGS_01,
4475struct Function_InvokerUtil_Dispatch<Function_InvokerUtil::e_OutofplaceFunctor,
4483 static RET invoke(
const Function_Rep *rep,
4492#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_B >= 6
4493template <
class FUNC,
class RET,
class ARGS_01,
4499struct Function_InvokerUtil_Dispatch<Function_InvokerUtil::e_OutofplaceFunctor,
4508 static RET invoke(
const Function_Rep *rep,
4518#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_B >= 7
4519template <
class FUNC,
class RET,
class ARGS_01,
4526struct Function_InvokerUtil_Dispatch<Function_InvokerUtil::e_OutofplaceFunctor,
4536 static RET invoke(
const Function_Rep *rep,
4547#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_B >= 8
4548template <
class FUNC,
class RET,
class ARGS_01,
4556struct Function_InvokerUtil_Dispatch<Function_InvokerUtil::e_OutofplaceFunctor,
4567 static RET invoke(
const Function_Rep *rep,
4579#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_B >= 9
4580template <
class FUNC,
class RET,
class ARGS_01,
4589struct Function_InvokerUtil_Dispatch<Function_InvokerUtil::e_OutofplaceFunctor,
4601 static RET invoke(
const Function_Rep *rep,
4614#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_B >= 10
4615template <
class FUNC,
class RET,
class ARGS_01,
4625struct Function_InvokerUtil_Dispatch<Function_InvokerUtil::e_OutofplaceFunctor,
4638 static RET invoke(
const Function_Rep *rep,
4652#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_B >= 11
4653template <
class FUNC,
class RET,
class ARGS_01,
4664struct Function_InvokerUtil_Dispatch<Function_InvokerUtil::e_OutofplaceFunctor,
4678 static RET invoke(
const Function_Rep *rep,
4693#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_B >= 12
4694template <
class FUNC,
class RET,
class ARGS_01,
4706struct Function_InvokerUtil_Dispatch<Function_InvokerUtil::e_OutofplaceFunctor,
4721 static RET invoke(
const Function_Rep *rep,
4737#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_B >= 13
4738template <
class FUNC,
class RET,
class ARGS_01,
4751struct Function_InvokerUtil_Dispatch<Function_InvokerUtil::e_OutofplaceFunctor,
4767 static RET invoke(
const Function_Rep *rep,
4789template <
class FUNC,
class RET,
class... ARGS>
4790struct Function_InvokerUtil_Dispatch<Function_InvokerUtil::e_FunctionPtr,
4791 RET(ARGS...), FUNC> {
4794 static RET invoke(
const Function_Rep *rep,
4798template <
class FUNC,
class RET,
class ARG0,
class... ARGS>
4799struct Function_InvokerUtil_Dispatch<Function_InvokerUtil::e_MemFunctionPtr,
4800 RET(ARG0, ARGS...), FUNC> {
4816 static RET invoke(
const Function_Rep *rep,
4821template <
class MEMBER_TYPE,
class CLASS_TYPE,
class RET,
class ARG0>
4822struct Function_InvokerUtil_Dispatch<Function_InvokerUtil::e_MemDataPtr,
4823 RET(ARG0), MEMBER_TYPE CLASS_TYPE::*> {
4825 typedef MEMBER_TYPE CLASS_TYPE::* Func;
4837 static RET invoke(
const Function_Rep *rep,
4841template <
class FUNC,
class RET,
class... ARGS>
4842struct Function_InvokerUtil_Dispatch<Function_InvokerUtil::e_InplaceFunctor,
4843 RET(ARGS...), FUNC> {
4846 static RET invoke(
const Function_Rep *rep,
4850template <
class FUNC,
class RET,
class... ARGS>
4851struct Function_InvokerUtil_Dispatch<Function_InvokerUtil::e_OutofplaceFunctor,
4852 RET(ARGS...), FUNC> {
4855 static RET invoke(
const Function_Rep *rep,
4870template <
class PROTOTYPE>
4878template <
class PROTOTYPE,
class FUNC>
4892 static const int k_INVOCATION_TYPE =
4896 Soo::IsInplaceFunc<FUNC>::value ? e_InplaceFunctor :
4897 e_OutofplaceFunctor;
4900 typedef Function_InvokerUtilNullCheck<UwFuncType> NullCheckerClass;
4903 typedef Function_InvokerUtil_Dispatch<k_INVOCATION_TYPE,
4905 UwFuncType> DispatcherClass;
4919 &DispatcherClass::invoke);
4928template <
class FUNC>
4935template <
class FUNC>
4942template <
class CLASS,
class MEMTYPE>
4955#if BSLS_COMPILERFEATURES_SIMULATE_VARIADIC_TEMPLATES
4958#ifndef BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT
4959#define BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT 13
4961#ifndef BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_C
4962#define BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_C BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT
4965#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_C >= 0
4966template <
class FUNC,
class RET>
4968Function_InvokerUtil_Dispatch<Function_InvokerUtil::e_FunctionPtr,
4970invoke(
const Function_Rep *rep)
4972 FUNC f = *rep->targetRaw<FUNC,
true>();
4981#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_C >= 1
4982template <
class FUNC,
class RET,
class ARGS_01>
4984Function_InvokerUtil_Dispatch<Function_InvokerUtil::e_FunctionPtr,
4985 RET(ARGS_01), FUNC>::
4986invoke(
const Function_Rep *rep,
4989 FUNC f = *rep->targetRaw<FUNC,
true>();
4998#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_C >= 2
4999template <
class FUNC,
class RET,
class ARGS_01,
5002Function_InvokerUtil_Dispatch<Function_InvokerUtil::e_FunctionPtr,
5005invoke(
const Function_Rep *rep,
5009 FUNC f = *rep->targetRaw<FUNC,
true>();
5019#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_C >= 3
5020template <
class FUNC,
class RET,
class ARGS_01,
5024Function_InvokerUtil_Dispatch<Function_InvokerUtil::e_FunctionPtr,
5028invoke(
const Function_Rep *rep,
5033 FUNC f = *rep->targetRaw<FUNC,
true>();
5044#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_C >= 4
5045template <
class FUNC,
class RET,
class ARGS_01,
5050Function_InvokerUtil_Dispatch<Function_InvokerUtil::e_FunctionPtr,
5055invoke(
const Function_Rep *rep,
5061 FUNC f = *rep->targetRaw<FUNC,
true>();
5073#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_C >= 5
5074template <
class FUNC,
class RET,
class ARGS_01,
5080Function_InvokerUtil_Dispatch<Function_InvokerUtil::e_FunctionPtr,
5086invoke(
const Function_Rep *rep,
5093 FUNC f = *rep->targetRaw<FUNC,
true>();
5106#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_C >= 6
5107template <
class FUNC,
class RET,
class ARGS_01,
5114Function_InvokerUtil_Dispatch<Function_InvokerUtil::e_FunctionPtr,
5121invoke(
const Function_Rep *rep,
5129 FUNC f = *rep->targetRaw<FUNC,
true>();
5143#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_C >= 7
5144template <
class FUNC,
class RET,
class ARGS_01,
5152Function_InvokerUtil_Dispatch<Function_InvokerUtil::e_FunctionPtr,
5160invoke(
const Function_Rep *rep,
5169 FUNC f = *rep->targetRaw<FUNC,
true>();
5184#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_C >= 8
5185template <
class FUNC,
class RET,
class ARGS_01,
5194Function_InvokerUtil_Dispatch<Function_InvokerUtil::e_FunctionPtr,
5203invoke(
const Function_Rep *rep,
5213 FUNC f = *rep->targetRaw<FUNC,
true>();
5229#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_C >= 9
5230template <
class FUNC,
class RET,
class ARGS_01,
5240Function_InvokerUtil_Dispatch<Function_InvokerUtil::e_FunctionPtr,
5250invoke(
const Function_Rep *rep,
5261 FUNC f = *rep->targetRaw<FUNC,
true>();
5278#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_C >= 10
5279template <
class FUNC,
class RET,
class ARGS_01,
5290Function_InvokerUtil_Dispatch<Function_InvokerUtil::e_FunctionPtr,
5301invoke(
const Function_Rep *rep,
5313 FUNC f = *rep->targetRaw<FUNC,
true>();
5331#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_C >= 11
5332template <
class FUNC,
class RET,
class ARGS_01,
5344Function_InvokerUtil_Dispatch<Function_InvokerUtil::e_FunctionPtr,
5356invoke(
const Function_Rep *rep,
5369 FUNC f = *rep->targetRaw<FUNC,
true>();
5388#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_C >= 12
5389template <
class FUNC,
class RET,
class ARGS_01,
5402Function_InvokerUtil_Dispatch<Function_InvokerUtil::e_FunctionPtr,
5415invoke(
const Function_Rep *rep,
5429 FUNC f = *rep->targetRaw<FUNC,
true>();
5449#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_C >= 13
5450template <
class FUNC,
class RET,
class ARGS_01,
5464Function_InvokerUtil_Dispatch<Function_InvokerUtil::e_FunctionPtr,
5478invoke(
const Function_Rep *rep,
5493 FUNC f = *rep->targetRaw<FUNC,
true>();
5515#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_C >= 0
5516template <
class FUNC,
class RET,
class ARG0>
5519Function_InvokerUtil_Dispatch<Function_InvokerUtil::e_MemFunctionPtr,
5529 RET, (
const_cast<Arg0Ref
>(obj).*f)(
5534#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_C >= 1
5535template <
class FUNC,
class RET,
class ARG0,
class ARGS_01>
5538Function_InvokerUtil_Dispatch<Function_InvokerUtil::e_MemFunctionPtr,
5539 RET(ARG0, ARGS_01), FUNC>::
5549 RET, (
const_cast<Arg0Ref
>(obj).*f)(
5554#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_C >= 2
5555template <
class FUNC,
class RET,
class ARG0,
class ARGS_01,
5559Function_InvokerUtil_Dispatch<Function_InvokerUtil::e_MemFunctionPtr,
5572 RET, (
const_cast<Arg0Ref
>(obj).*f)(
5578#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_C >= 3
5579template <
class FUNC,
class RET,
class ARG0,
class ARGS_01,
5584Function_InvokerUtil_Dispatch<Function_InvokerUtil::e_MemFunctionPtr,
5599 RET, (
const_cast<Arg0Ref
>(obj).*f)(
5606#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_C >= 4
5607template <
class FUNC,
class RET,
class ARG0,
class ARGS_01,
5613Function_InvokerUtil_Dispatch<Function_InvokerUtil::e_MemFunctionPtr,
5630 RET, (
const_cast<Arg0Ref
>(obj).*f)(
5638#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_C >= 5
5639template <
class FUNC,
class RET,
class ARG0,
class ARGS_01,
5646Function_InvokerUtil_Dispatch<Function_InvokerUtil::e_MemFunctionPtr,
5665 RET, (
const_cast<Arg0Ref
>(obj).*f)(
5674#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_C >= 6
5675template <
class FUNC,
class RET,
class ARG0,
class ARGS_01,
5683Function_InvokerUtil_Dispatch<Function_InvokerUtil::e_MemFunctionPtr,
5704 RET, (
const_cast<Arg0Ref
>(obj).*f)(
5714#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_C >= 7
5715template <
class FUNC,
class RET,
class ARG0,
class ARGS_01,
5724Function_InvokerUtil_Dispatch<Function_InvokerUtil::e_MemFunctionPtr,
5747 RET, (
const_cast<Arg0Ref
>(obj).*f)(
5758#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_C >= 8
5759template <
class FUNC,
class RET,
class ARG0,
class ARGS_01,
5769Function_InvokerUtil_Dispatch<Function_InvokerUtil::e_MemFunctionPtr,
5794 RET, (
const_cast<Arg0Ref
>(obj).*f)(
5806#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_C >= 9
5807template <
class FUNC,
class RET,
class ARG0,
class ARGS_01,
5818Function_InvokerUtil_Dispatch<Function_InvokerUtil::e_MemFunctionPtr,
5845 RET, (
const_cast<Arg0Ref
>(obj).*f)(
5858#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_C >= 10
5859template <
class FUNC,
class RET,
class ARG0,
class ARGS_01,
5871Function_InvokerUtil_Dispatch<Function_InvokerUtil::e_MemFunctionPtr,
5900 RET, (
const_cast<Arg0Ref
>(obj).*f)(
5914#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_C >= 11
5915template <
class FUNC,
class RET,
class ARG0,
class ARGS_01,
5928Function_InvokerUtil_Dispatch<Function_InvokerUtil::e_MemFunctionPtr,
5959 RET, (
const_cast<Arg0Ref
>(obj).*f)(
5974#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_C >= 12
5975template <
class FUNC,
class RET,
class ARG0,
class ARGS_01,
5989Function_InvokerUtil_Dispatch<Function_InvokerUtil::e_MemFunctionPtr,
6022 RET, (
const_cast<Arg0Ref
>(obj).*f)(
6038#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_C >= 13
6039template <
class FUNC,
class RET,
class ARG0,
class ARGS_01,
6054Function_InvokerUtil_Dispatch<Function_InvokerUtil::e_MemFunctionPtr,
6089 RET, (
const_cast<Arg0Ref
>(obj).*f)(
6107#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_C >= 0
6108template <
class FUNC,
class RET,
class ARG0>
6111Function_InvokerUtil_Dispatch<Function_InvokerUtil::e_MemFunctionPtr,
6121 RET, ((*
const_cast<Arg0Ref
>(obj)).*f)(
6126#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_C >= 1
6127template <
class FUNC,
class RET,
class ARG0,
class ARGS_01>
6130Function_InvokerUtil_Dispatch<Function_InvokerUtil::e_MemFunctionPtr,
6131 RET(ARG0, ARGS_01), FUNC>::
6141 RET, ((*
const_cast<Arg0Ref
>(obj)).*f)(
6146#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_C >= 2
6147template <
class FUNC,
class RET,
class ARG0,
class ARGS_01,
6151Function_InvokerUtil_Dispatch<Function_InvokerUtil::e_MemFunctionPtr,
6164 RET, ((*
const_cast<Arg0Ref
>(obj)).*f)(
6170#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_C >= 3
6171template <
class FUNC,
class RET,
class ARG0,
class ARGS_01,
6176Function_InvokerUtil_Dispatch<Function_InvokerUtil::e_MemFunctionPtr,
6191 RET, ((*
const_cast<Arg0Ref
>(obj)).*f)(
6198#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_C >= 4
6199template <
class FUNC,
class RET,
class ARG0,
class ARGS_01,
6205Function_InvokerUtil_Dispatch<Function_InvokerUtil::e_MemFunctionPtr,
6222 RET, ((*
const_cast<Arg0Ref
>(obj)).*f)(
6230#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_C >= 5
6231template <
class FUNC,
class RET,
class ARG0,
class ARGS_01,
6238Function_InvokerUtil_Dispatch<Function_InvokerUtil::e_MemFunctionPtr,
6257 RET, ((*
const_cast<Arg0Ref
>(obj)).*f)(
6266#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_C >= 6
6267template <
class FUNC,
class RET,
class ARG0,
class ARGS_01,
6275Function_InvokerUtil_Dispatch<Function_InvokerUtil::e_MemFunctionPtr,
6296 RET, ((*
const_cast<Arg0Ref
>(obj)).*f)(
6306#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_C >= 7
6307template <
class FUNC,
class RET,
class ARG0,
class ARGS_01,
6316Function_InvokerUtil_Dispatch<Function_InvokerUtil::e_MemFunctionPtr,
6339 RET, ((*
const_cast<Arg0Ref
>(obj)).*f)(
6350#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_C >= 8
6351template <
class FUNC,
class RET,
class ARG0,
class ARGS_01,
6361Function_InvokerUtil_Dispatch<Function_InvokerUtil::e_MemFunctionPtr,
6386 RET, ((*
const_cast<Arg0Ref
>(obj)).*f)(
6398#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_C >= 9
6399template <
class FUNC,
class RET,
class ARG0,
class ARGS_01,
6410Function_InvokerUtil_Dispatch<Function_InvokerUtil::e_MemFunctionPtr,
6437 RET, ((*
const_cast<Arg0Ref
>(obj)).*f)(
6450#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_C >= 10
6451template <
class FUNC,
class RET,
class ARG0,
class ARGS_01,
6463Function_InvokerUtil_Dispatch<Function_InvokerUtil::e_MemFunctionPtr,
6492 RET, ((*
const_cast<Arg0Ref
>(obj)).*f)(
6506#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_C >= 11
6507template <
class FUNC,
class RET,
class ARG0,
class ARGS_01,
6520Function_InvokerUtil_Dispatch<Function_InvokerUtil::e_MemFunctionPtr,
6551 RET, ((*
const_cast<Arg0Ref
>(obj)).*f)(
6566#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_C >= 12
6567template <
class FUNC,
class RET,
class ARG0,
class ARGS_01,
6581Function_InvokerUtil_Dispatch<Function_InvokerUtil::e_MemFunctionPtr,
6614 RET, ((*
const_cast<Arg0Ref
>(obj)).*f)(
6630#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_C >= 13
6631template <
class FUNC,
class RET,
class ARG0,
class ARGS_01,
6646Function_InvokerUtil_Dispatch<Function_InvokerUtil::e_MemFunctionPtr,
6681 RET, ((*
const_cast<Arg0Ref
>(obj)).*f)(
6699#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_C >= 0
6700template <
class FUNC,
class RET,
class ARG0>
6702Function_InvokerUtil_Dispatch<Function_InvokerUtil::e_MemFunctionPtr,
6704invoke(
const Function_Rep *rep,
6715 FUNC f = *rep->targetRaw<FUNC,
true>();
6718 invokeImp(IsDirect(), f, obj));
6722#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_C >= 1
6723template <
class FUNC,
class RET,
class ARG0,
class ARGS_01>
6725Function_InvokerUtil_Dispatch<Function_InvokerUtil::e_MemFunctionPtr,
6726 RET(ARG0, ARGS_01), FUNC>::
6727invoke(
const Function_Rep *rep,
6739 FUNC f = *rep->targetRaw<FUNC,
true>();
6742 invokeImp(IsDirect(), f, obj,
6747#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_C >= 2
6748template <
class FUNC,
class RET,
class ARG0,
class ARGS_01,
6751Function_InvokerUtil_Dispatch<Function_InvokerUtil::e_MemFunctionPtr,
6754invoke(
const Function_Rep *rep,
6767 FUNC f = *rep->targetRaw<FUNC,
true>();
6770 invokeImp(IsDirect(), f, obj,
6776#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_C >= 3
6777template <
class FUNC,
class RET,
class ARG0,
class ARGS_01,
6781Function_InvokerUtil_Dispatch<Function_InvokerUtil::e_MemFunctionPtr,
6785invoke(
const Function_Rep *rep,
6799 FUNC f = *rep->targetRaw<FUNC,
true>();
6802 invokeImp(IsDirect(), f, obj,
6809#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_C >= 4
6810template <
class FUNC,
class RET,
class ARG0,
class ARGS_01,
6815Function_InvokerUtil_Dispatch<Function_InvokerUtil::e_MemFunctionPtr,
6820invoke(
const Function_Rep *rep,
6835 FUNC f = *rep->targetRaw<FUNC,
true>();
6838 invokeImp(IsDirect(), f, obj,
6846#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_C >= 5
6847template <
class FUNC,
class RET,
class ARG0,
class ARGS_01,
6853Function_InvokerUtil_Dispatch<Function_InvokerUtil::e_MemFunctionPtr,
6859invoke(
const Function_Rep *rep,
6875 FUNC f = *rep->targetRaw<FUNC,
true>();
6878 invokeImp(IsDirect(), f, obj,
6887#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_C >= 6
6888template <
class FUNC,
class RET,
class ARG0,
class ARGS_01,
6895Function_InvokerUtil_Dispatch<Function_InvokerUtil::e_MemFunctionPtr,
6902invoke(
const Function_Rep *rep,
6919 FUNC f = *rep->targetRaw<FUNC,
true>();
6922 invokeImp(IsDirect(), f, obj,
6932#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_C >= 7
6933template <
class FUNC,
class RET,
class ARG0,
class ARGS_01,
6941Function_InvokerUtil_Dispatch<Function_InvokerUtil::e_MemFunctionPtr,
6949invoke(
const Function_Rep *rep,
6967 FUNC f = *rep->targetRaw<FUNC,
true>();
6970 invokeImp(IsDirect(), f, obj,
6981#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_C >= 8
6982template <
class FUNC,
class RET,
class ARG0,
class ARGS_01,
6991Function_InvokerUtil_Dispatch<Function_InvokerUtil::e_MemFunctionPtr,
7000invoke(
const Function_Rep *rep,
7019 FUNC f = *rep->targetRaw<FUNC,
true>();
7022 invokeImp(IsDirect(), f, obj,
7034#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_C >= 9
7035template <
class FUNC,
class RET,
class ARG0,
class ARGS_01,
7045Function_InvokerUtil_Dispatch<Function_InvokerUtil::e_MemFunctionPtr,
7055invoke(
const Function_Rep *rep,
7075 FUNC f = *rep->targetRaw<FUNC,
true>();
7078 invokeImp(IsDirect(), f, obj,
7091#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_C >= 10
7092template <
class FUNC,
class RET,
class ARG0,
class ARGS_01,
7103Function_InvokerUtil_Dispatch<Function_InvokerUtil::e_MemFunctionPtr,
7114invoke(
const Function_Rep *rep,
7135 FUNC f = *rep->targetRaw<FUNC,
true>();
7138 invokeImp(IsDirect(), f, obj,
7152#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_C >= 11
7153template <
class FUNC,
class RET,
class ARG0,
class ARGS_01,
7165Function_InvokerUtil_Dispatch<Function_InvokerUtil::e_MemFunctionPtr,
7177invoke(
const Function_Rep *rep,
7199 FUNC f = *rep->targetRaw<FUNC,
true>();
7202 invokeImp(IsDirect(), f, obj,
7217#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_C >= 12
7218template <
class FUNC,
class RET,
class ARG0,
class ARGS_01,
7231Function_InvokerUtil_Dispatch<Function_InvokerUtil::e_MemFunctionPtr,
7244invoke(
const Function_Rep *rep,
7267 FUNC f = *rep->targetRaw<FUNC,
true>();
7270 invokeImp(IsDirect(), f, obj,
7286#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_C >= 13
7287template <
class FUNC,
class RET,
class ARG0,
class ARGS_01,
7301Function_InvokerUtil_Dispatch<Function_InvokerUtil::e_MemFunctionPtr,
7315invoke(
const Function_Rep *rep,
7339 FUNC f = *rep->targetRaw<FUNC,
true>();
7342 invokeImp(IsDirect(), f, obj,
7360template <
class MEMBER_TYPE,
class CLASS_TYPE,
class RET,
class ARG0>
7363Function_InvokerUtil_Dispatch<Function_InvokerUtil::e_MemDataPtr,
7364 RET(ARG0), MEMBER_TYPE CLASS_TYPE::*>::
7373 RET, (
const_cast<Arg0Ref
>(obj).*f));
7376template <
class MEMBER_TYPE,
class CLASS_TYPE,
class RET,
class ARG0>
7379Function_InvokerUtil_Dispatch<Function_InvokerUtil::e_MemDataPtr,
7380 RET(ARG0), MEMBER_TYPE CLASS_TYPE::*>::
7389 RET, ((*
const_cast<Arg0Ref
>(obj)).*f));
7392template <
class MEMBER_TYPE,
class CLASS_TYPE,
class RET,
class ARG0>
7394Function_InvokerUtil_Dispatch<Function_InvokerUtil::e_MemDataPtr,
7395 RET(ARG0), MEMBER_TYPE CLASS_TYPE::*>::
7396invoke(
const Function_Rep *rep,
7401 const volatile CLASS_TYPE *
7404 Func f = *rep->targetRaw<Func,
true>();
7407 RET, invokeImp(IsDirect(), f, obj));
7410#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_C >= 0
7411template <
class FUNC,
class RET>
7413Function_InvokerUtil_Dispatch<Function_InvokerUtil::e_InplaceFunctor,
7415invoke(
const Function_Rep *rep)
7417 FUNC& f = *rep->targetRaw<FUNC,
true>();
7425#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_C >= 1
7426template <
class FUNC,
class RET,
class ARGS_01>
7428Function_InvokerUtil_Dispatch<Function_InvokerUtil::e_InplaceFunctor,
7429 RET(ARGS_01), FUNC>::
7430invoke(
const Function_Rep *rep,
7433 FUNC& f = *rep->targetRaw<FUNC,
true>();
7441#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_C >= 2
7442template <
class FUNC,
class RET,
class ARGS_01,
7445Function_InvokerUtil_Dispatch<Function_InvokerUtil::e_InplaceFunctor,
7448invoke(
const Function_Rep *rep,
7452 FUNC& f = *rep->targetRaw<FUNC,
true>();
7461#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_C >= 3
7462template <
class FUNC,
class RET,
class ARGS_01,
7466Function_InvokerUtil_Dispatch<Function_InvokerUtil::e_InplaceFunctor,
7470invoke(
const Function_Rep *rep,
7475 FUNC& f = *rep->targetRaw<FUNC,
true>();
7485#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_C >= 4
7486template <
class FUNC,
class RET,
class ARGS_01,
7491Function_InvokerUtil_Dispatch<Function_InvokerUtil::e_InplaceFunctor,
7496invoke(
const Function_Rep *rep,
7502 FUNC& f = *rep->targetRaw<FUNC,
true>();
7513#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_C >= 5
7514template <
class FUNC,
class RET,
class ARGS_01,
7520Function_InvokerUtil_Dispatch<Function_InvokerUtil::e_InplaceFunctor,
7526invoke(
const Function_Rep *rep,
7533 FUNC& f = *rep->targetRaw<FUNC,
true>();
7545#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_C >= 6
7546template <
class FUNC,
class RET,
class ARGS_01,
7553Function_InvokerUtil_Dispatch<Function_InvokerUtil::e_InplaceFunctor,
7560invoke(
const Function_Rep *rep,
7568 FUNC& f = *rep->targetRaw<FUNC,
true>();
7581#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_C >= 7
7582template <
class FUNC,
class RET,
class ARGS_01,
7590Function_InvokerUtil_Dispatch<Function_InvokerUtil::e_InplaceFunctor,
7598invoke(
const Function_Rep *rep,
7607 FUNC& f = *rep->targetRaw<FUNC,
true>();
7621#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_C >= 8
7622template <
class FUNC,
class RET,
class ARGS_01,
7631Function_InvokerUtil_Dispatch<Function_InvokerUtil::e_InplaceFunctor,
7640invoke(
const Function_Rep *rep,
7650 FUNC& f = *rep->targetRaw<FUNC,
true>();
7665#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_C >= 9
7666template <
class FUNC,
class RET,
class ARGS_01,
7676Function_InvokerUtil_Dispatch<Function_InvokerUtil::e_InplaceFunctor,
7686invoke(
const Function_Rep *rep,
7697 FUNC& f = *rep->targetRaw<FUNC,
true>();
7713#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_C >= 10
7714template <
class FUNC,
class RET,
class ARGS_01,
7725Function_InvokerUtil_Dispatch<Function_InvokerUtil::e_InplaceFunctor,
7736invoke(
const Function_Rep *rep,
7748 FUNC& f = *rep->targetRaw<FUNC,
true>();
7765#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_C >= 11
7766template <
class FUNC,
class RET,
class ARGS_01,
7778Function_InvokerUtil_Dispatch<Function_InvokerUtil::e_InplaceFunctor,
7790invoke(
const Function_Rep *rep,
7803 FUNC& f = *rep->targetRaw<FUNC,
true>();
7821#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_C >= 12
7822template <
class FUNC,
class RET,
class ARGS_01,
7835Function_InvokerUtil_Dispatch<Function_InvokerUtil::e_InplaceFunctor,
7848invoke(
const Function_Rep *rep,
7862 FUNC& f = *rep->targetRaw<FUNC,
true>();
7881#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_C >= 13
7882template <
class FUNC,
class RET,
class ARGS_01,
7896Function_InvokerUtil_Dispatch<Function_InvokerUtil::e_InplaceFunctor,
7910invoke(
const Function_Rep *rep,
7925 FUNC& f = *rep->targetRaw<FUNC,
true>();
7946#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_C >= 0
7947template <
class FUNC,
class RET>
7949Function_InvokerUtil_Dispatch<Function_InvokerUtil::e_OutofplaceFunctor,
7951invoke(
const Function_Rep *rep)
7953 FUNC& f = *rep->targetRaw<FUNC,
false>();
7961#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_C >= 1
7962template <
class FUNC,
class RET,
class ARGS_01>
7964Function_InvokerUtil_Dispatch<Function_InvokerUtil::e_OutofplaceFunctor,
7965 RET(ARGS_01), FUNC>::
7966invoke(
const Function_Rep *rep,
7969 FUNC& f = *rep->targetRaw<FUNC,
false>();
7977#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_C >= 2
7978template <
class FUNC,
class RET,
class ARGS_01,
7981Function_InvokerUtil_Dispatch<Function_InvokerUtil::e_OutofplaceFunctor,
7984invoke(
const Function_Rep *rep,
7988 FUNC& f = *rep->targetRaw<FUNC,
false>();
7997#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_C >= 3
7998template <
class FUNC,
class RET,
class ARGS_01,
8002Function_InvokerUtil_Dispatch<Function_InvokerUtil::e_OutofplaceFunctor,
8006invoke(
const Function_Rep *rep,
8011 FUNC& f = *rep->targetRaw<FUNC,
false>();
8021#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_C >= 4
8022template <
class FUNC,
class RET,
class ARGS_01,
8027Function_InvokerUtil_Dispatch<Function_InvokerUtil::e_OutofplaceFunctor,
8032invoke(
const Function_Rep *rep,
8038 FUNC& f = *rep->targetRaw<FUNC,
false>();
8049#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_C >= 5
8050template <
class FUNC,
class RET,
class ARGS_01,
8056Function_InvokerUtil_Dispatch<Function_InvokerUtil::e_OutofplaceFunctor,
8062invoke(
const Function_Rep *rep,
8069 FUNC& f = *rep->targetRaw<FUNC,
false>();
8081#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_C >= 6
8082template <
class FUNC,
class RET,
class ARGS_01,
8089Function_InvokerUtil_Dispatch<Function_InvokerUtil::e_OutofplaceFunctor,
8096invoke(
const Function_Rep *rep,
8104 FUNC& f = *rep->targetRaw<FUNC,
false>();
8117#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_C >= 7
8118template <
class FUNC,
class RET,
class ARGS_01,
8126Function_InvokerUtil_Dispatch<Function_InvokerUtil::e_OutofplaceFunctor,
8134invoke(
const Function_Rep *rep,
8143 FUNC& f = *rep->targetRaw<FUNC,
false>();
8157#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_C >= 8
8158template <
class FUNC,
class RET,
class ARGS_01,
8167Function_InvokerUtil_Dispatch<Function_InvokerUtil::e_OutofplaceFunctor,
8176invoke(
const Function_Rep *rep,
8186 FUNC& f = *rep->targetRaw<FUNC,
false>();
8201#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_C >= 9
8202template <
class FUNC,
class RET,
class ARGS_01,
8212Function_InvokerUtil_Dispatch<Function_InvokerUtil::e_OutofplaceFunctor,
8222invoke(
const Function_Rep *rep,
8233 FUNC& f = *rep->targetRaw<FUNC,
false>();
8249#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_C >= 10
8250template <
class FUNC,
class RET,
class ARGS_01,
8261Function_InvokerUtil_Dispatch<Function_InvokerUtil::e_OutofplaceFunctor,
8272invoke(
const Function_Rep *rep,
8284 FUNC& f = *rep->targetRaw<FUNC,
false>();
8301#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_C >= 11
8302template <
class FUNC,
class RET,
class ARGS_01,
8314Function_InvokerUtil_Dispatch<Function_InvokerUtil::e_OutofplaceFunctor,
8326invoke(
const Function_Rep *rep,
8339 FUNC& f = *rep->targetRaw<FUNC,
false>();
8357#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_C >= 12
8358template <
class FUNC,
class RET,
class ARGS_01,
8371Function_InvokerUtil_Dispatch<Function_InvokerUtil::e_OutofplaceFunctor,
8384invoke(
const Function_Rep *rep,
8398 FUNC& f = *rep->targetRaw<FUNC,
false>();
8417#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_C >= 13
8418template <
class FUNC,
class RET,
class ARGS_01,
8432Function_InvokerUtil_Dispatch<Function_InvokerUtil::e_OutofplaceFunctor,
8446invoke(
const Function_Rep *rep,
8461 FUNC& f = *rep->targetRaw<FUNC,
false>();
8485template <
class FUNC,
class RET,
class... ARGS>
8487Function_InvokerUtil_Dispatch<Function_InvokerUtil::e_FunctionPtr,
8488 RET(ARGS...), FUNC>::
8489invoke(
const Function_Rep *rep,
8492 FUNC f = *rep->targetRaw<FUNC,
true>();
8500template <
class FUNC,
class RET,
class ARG0,
class... ARGS>
8503Function_InvokerUtil_Dispatch<Function_InvokerUtil::e_MemFunctionPtr,
8504 RET(ARG0, ARGS...), FUNC>::
8514 RET, (
const_cast<Arg0Ref
>(obj).*f)(
8518template <
class FUNC,
class RET,
class ARG0,
class... ARGS>
8521Function_InvokerUtil_Dispatch<Function_InvokerUtil::e_MemFunctionPtr,
8522 RET(ARG0, ARGS...), FUNC>::
8532 RET, ((*
const_cast<Arg0Ref
>(obj)).*f)(
8536template <
class FUNC,
class RET,
class ARG0,
class... ARGS>
8538Function_InvokerUtil_Dispatch<Function_InvokerUtil::e_MemFunctionPtr,
8539 RET(ARG0, ARGS...), FUNC>::
8540invoke(
const Function_Rep *rep,
8552 FUNC f = *rep->targetRaw<FUNC,
true>();
8555 invokeImp(IsDirect(), f, obj,
8559template <
class MEMBER_TYPE,
class CLASS_TYPE,
class RET,
class ARG0>
8562Function_InvokerUtil_Dispatch<Function_InvokerUtil::e_MemDataPtr,
8563 RET(ARG0), MEMBER_TYPE CLASS_TYPE::*>::
8572 RET, (
const_cast<Arg0Ref
>(obj).*f));
8575template <
class MEMBER_TYPE,
class CLASS_TYPE,
class RET,
class ARG0>
8578Function_InvokerUtil_Dispatch<Function_InvokerUtil::e_MemDataPtr,
8579 RET(ARG0), MEMBER_TYPE CLASS_TYPE::*>::
8588 RET, ((*
const_cast<Arg0Ref
>(obj)).*f));
8591template <
class MEMBER_TYPE,
class CLASS_TYPE,
class RET,
class ARG0>
8593Function_InvokerUtil_Dispatch<Function_InvokerUtil::e_MemDataPtr,
8594 RET(ARG0), MEMBER_TYPE CLASS_TYPE::*>::
8595invoke(
const Function_Rep *rep,
8600 const volatile CLASS_TYPE *
8603 Func f = *rep->targetRaw<Func,
true>();
8606 RET, invokeImp(IsDirect(), f, obj));
8609template <
class FUNC,
class RET,
class... ARGS>
8611Function_InvokerUtil_Dispatch<Function_InvokerUtil::e_InplaceFunctor,
8612 RET(ARGS...), FUNC>::
8613invoke(
const Function_Rep *rep,
8616 FUNC& f = *rep->targetRaw<FUNC,
true>();
8623template <
class FUNC,
class RET,
class... ARGS>
8625Function_InvokerUtil_Dispatch<Function_InvokerUtil::e_OutofplaceFunctor,
8626 RET(ARGS...), FUNC>::
8627invoke(
const Function_Rep *rep,
8630 FUNC& f = *rep->targetRaw<FUNC,
false>();
8644# error Not valid except when included from bslstl_function_invokerutil.h
Definition bslmf_invokeresult.h:362
Provide a namespace for the forwardToTarget function.
Definition bslmf_forwardingtype.h:456
Imp::Type Type
Definition bslmf_forwardingtype.h:441
void GenericInvoker()
Definition bslstl_function_rep.h:375
Definition bslstl_function_smallobjectoptimization.h:78
#define BSLA_NORETURN
Definition bsla_noreturn.h:169
#define BSLMF_ASSERT(expr)
Definition bslmf_assert.h:231
#define BSLSTL_FUNCTION_INVOKERUTIL_CAST_RESULT(RET, X)
Definition bslstl_function_invokerutil.h:191
bool isNull(const TYPE &object)
BloombergLP::bsls::Nullptr_Impl::Type nullptr_t
Definition bsls_nullptr.h:283
Definition bdlbb_blob.h:579
Definition bslstl_algorithm.h:84
Definition bslmf_addlvaluereference.h:128
Definition bslmf_conditional.h:123
Definition bslmf_integralconstant.h:261
Definition bslmf_isconvertible.h:875
Definition bslmf_ismemberpointer.h:143
NothrowMovableUtil_Traits< TYPE >::UnwrappedType type
Definition bslalg_nothrowmovableutil.h:376
static UnwrappedType< TYPE >::type & unwrap(TYPE &f)
Definition bslmf_functionpointertraits.h:163
Definition bslmf_memberfunctionpointertraits.h:164
Definition bslmf_memberfunctionpointertraits.h:150
t_TYPE type
Definition bslmf_movableref.h:1188
static bool isNull(const FUNC &)
Return false.
Definition bslstl_function_invokerutil.h:831
static GenericInvoker * invokerForFunc(const bsl::nullptr_t &)
Function_Rep::GenericInvoker GenericInvoker
Definition bslstl_function_invokerutil.h:239
@ e_Null
Definition bslstl_function_invokerutil.h:229
@ e_MemDataPtr
Definition bslstl_function_invokerutil.h:232
@ e_FunctionPtr
Definition bslstl_function_invokerutil.h:230
@ e_InplaceFunctor
Definition bslstl_function_invokerutil.h:233
@ e_OutofplaceFunctor
Definition bslstl_function_invokerutil.h:234
@ e_MemFunctionPtr
Definition bslstl_function_invokerutil.h:231
static BSLA_NORETURN void throwBadFunctionCall()