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;
96struct Function_InvokerUtil {
114#ifdef BSLSTL_FUNCTION_INVOKERUTIL_SUPPORT_IS_FUNC_INVOCABLE
138 template <
class PROTOTYPE,
class FUNC>
139 struct IsFuncInvocable
140 : Function_InvokerUtil_IsFuncInvocable<PROTOTYPE, FUNC> {
149 template <
class PROTOTYPE>
157 template <
class PROTOTYPE,
class FUNC>
174struct Function_InvokerUtilNullCheck {
179 static bool isNull(
const FUNC&);
184struct Function_InvokerUtilNullCheck<FUNC *> {
190 static bool isNull(FUNC *f);
194template <
class CLASS,
class MEMTYPE>
195struct Function_InvokerUtilNullCheck<MEMTYPE CLASS::*> {
202 static bool isNull(MEMTYPE CLASS::* f);
205#if BSLS_COMPILERFEATURES_SIMULATE_VARIADIC_TEMPLATES
208#ifndef BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT
209#define BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT 13
211#ifndef BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_A
212#define BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_A BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT
216#ifdef BSLSTL_FUNCTION_INVOKERUTIL_SUPPORT_IS_FUNC_INVOCABLE
218template <
class VOID_TYPE,
221#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_A >= 0
222 ,
class ARGS_0 = BSLS_COMPILERFEATURES_NILT
225#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_A >= 1
226 ,
class ARGS_1 = BSLS_COMPILERFEATURES_NILT
229#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_A >= 2
230 ,
class ARGS_2 = BSLS_COMPILERFEATURES_NILT
233#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_A >= 3
234 ,
class ARGS_3 = BSLS_COMPILERFEATURES_NILT
237#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_A >= 4
238 ,
class ARGS_4 = BSLS_COMPILERFEATURES_NILT
241#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_A >= 5
242 ,
class ARGS_5 = BSLS_COMPILERFEATURES_NILT
245#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_A >= 6
246 ,
class ARGS_6 = BSLS_COMPILERFEATURES_NILT
249#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_A >= 7
250 ,
class ARGS_7 = BSLS_COMPILERFEATURES_NILT
253#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_A >= 8
254 ,
class ARGS_8 = BSLS_COMPILERFEATURES_NILT
257#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_A >= 9
258 ,
class ARGS_9 = BSLS_COMPILERFEATURES_NILT
261#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_A >= 10
262 ,
class ARGS_10 = BSLS_COMPILERFEATURES_NILT
265#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_A >= 11
266 ,
class ARGS_11 = BSLS_COMPILERFEATURES_NILT
269#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_A >= 12
270 ,
class ARGS_12 = BSLS_COMPILERFEATURES_NILT
272 ,
class = BSLS_COMPILERFEATURES_NILT>
273struct Function_InvokerUtil_IsFuncInvocableImp;
276#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_A >= 0
277template <
class RET,
class FUNC>
278struct Function_InvokerUtil_IsFuncInvocable<RET(), FUNC>
279: Function_InvokerUtil_IsFuncInvocableImp<void, RET, FUNC> {
283#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_A >= 1
284template <
class RET,
class FUNC,
class ARGS_01>
285struct Function_InvokerUtil_IsFuncInvocable<RET(ARGS_01), FUNC>
286: Function_InvokerUtil_IsFuncInvocableImp<void, RET, FUNC, ARGS_01> {
290#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_A >= 2
291template <
class RET,
class FUNC,
class ARGS_01,
293struct Function_InvokerUtil_IsFuncInvocable<RET(ARGS_01,
295: Function_InvokerUtil_IsFuncInvocableImp<void, RET, FUNC, ARGS_01,
300#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_A >= 3
301template <
class RET,
class FUNC,
class ARGS_01,
304struct Function_InvokerUtil_IsFuncInvocable<RET(ARGS_01,
307: Function_InvokerUtil_IsFuncInvocableImp<void, RET, FUNC, ARGS_01,
313#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_A >= 4
314template <
class RET,
class FUNC,
class ARGS_01,
318struct Function_InvokerUtil_IsFuncInvocable<RET(ARGS_01,
322: Function_InvokerUtil_IsFuncInvocableImp<void, RET, FUNC, ARGS_01,
329#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_A >= 5
330template <
class RET,
class FUNC,
class ARGS_01,
335struct Function_InvokerUtil_IsFuncInvocable<RET(ARGS_01,
340: Function_InvokerUtil_IsFuncInvocableImp<void, RET, FUNC, ARGS_01,
348#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_A >= 6
349template <
class RET,
class FUNC,
class ARGS_01,
355struct Function_InvokerUtil_IsFuncInvocable<RET(ARGS_01,
361: Function_InvokerUtil_IsFuncInvocableImp<void, RET, FUNC, ARGS_01,
370#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_A >= 7
371template <
class RET,
class FUNC,
class ARGS_01,
378struct Function_InvokerUtil_IsFuncInvocable<RET(ARGS_01,
385: Function_InvokerUtil_IsFuncInvocableImp<void, RET, FUNC, ARGS_01,
395#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_A >= 8
396template <
class RET,
class FUNC,
class ARGS_01,
404struct Function_InvokerUtil_IsFuncInvocable<RET(ARGS_01,
412: Function_InvokerUtil_IsFuncInvocableImp<void, RET, FUNC, ARGS_01,
423#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_A >= 9
424template <
class RET,
class FUNC,
class ARGS_01,
433struct Function_InvokerUtil_IsFuncInvocable<RET(ARGS_01,
442: Function_InvokerUtil_IsFuncInvocableImp<void, RET, FUNC, ARGS_01,
454#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_A >= 10
455template <
class RET,
class FUNC,
class ARGS_01,
465struct Function_InvokerUtil_IsFuncInvocable<RET(ARGS_01,
475: Function_InvokerUtil_IsFuncInvocableImp<void, RET, FUNC, ARGS_01,
488#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_A >= 11
489template <
class RET,
class FUNC,
class ARGS_01,
500struct Function_InvokerUtil_IsFuncInvocable<RET(ARGS_01,
511: Function_InvokerUtil_IsFuncInvocableImp<void, RET, FUNC, ARGS_01,
525#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_A >= 12
526template <
class RET,
class FUNC,
class ARGS_01,
538struct Function_InvokerUtil_IsFuncInvocable<RET(ARGS_01,
550: Function_InvokerUtil_IsFuncInvocableImp<void, RET, FUNC, ARGS_01,
565#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_A >= 13
566template <
class RET,
class FUNC,
class ARGS_01,
579struct Function_InvokerUtil_IsFuncInvocable<RET(ARGS_01,
592: Function_InvokerUtil_IsFuncInvocableImp<void, RET, FUNC, ARGS_01,
611struct Function_InvokerUtil_ForwardType;
613template <
class FROM,
class TO>
614struct Function_InvokerUtil_IsExplicitlyConvertible;
617#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_A >= 0
618 ,
class ARGS_0 = BSLS_COMPILERFEATURES_NILT
621#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_A >= 1
622 ,
class ARGS_1 = BSLS_COMPILERFEATURES_NILT
625#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_A >= 2
626 ,
class ARGS_2 = BSLS_COMPILERFEATURES_NILT
629#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_A >= 3
630 ,
class ARGS_3 = BSLS_COMPILERFEATURES_NILT
633#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_A >= 4
634 ,
class ARGS_4 = BSLS_COMPILERFEATURES_NILT
637#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_A >= 5
638 ,
class ARGS_5 = BSLS_COMPILERFEATURES_NILT
641#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_A >= 6
642 ,
class ARGS_6 = BSLS_COMPILERFEATURES_NILT
645#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_A >= 7
646 ,
class ARGS_7 = BSLS_COMPILERFEATURES_NILT
649#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_A >= 8
650 ,
class ARGS_8 = BSLS_COMPILERFEATURES_NILT
653#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_A >= 9
654 ,
class ARGS_9 = BSLS_COMPILERFEATURES_NILT
657#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_A >= 10
658 ,
class ARGS_10 = BSLS_COMPILERFEATURES_NILT
661#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_A >= 11
662 ,
class ARGS_11 = BSLS_COMPILERFEATURES_NILT
665#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_A >= 12
666 ,
class ARGS_12 = BSLS_COMPILERFEATURES_NILT
668 ,
class = BSLS_COMPILERFEATURES_NILT>
669struct Function_InvokerUtil_ResultType;
672#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_A >= 0
673template <
class VOID_TYPE,
class RET,
class FUNC>
674struct Function_InvokerUtil_IsFuncInvocableImp<VOID_TYPE, RET, FUNC
679#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_A >= 1
680template <
class VOID_TYPE,
class RET,
class FUNC,
class ARGS_01>
681struct Function_InvokerUtil_IsFuncInvocableImp<VOID_TYPE, RET, FUNC, ARGS_01
686#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_A >= 2
687template <
class VOID_TYPE,
class RET,
class FUNC,
class ARGS_01,
689struct Function_InvokerUtil_IsFuncInvocableImp<VOID_TYPE, RET, FUNC, ARGS_01,
695#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_A >= 3
696template <
class VOID_TYPE,
class RET,
class FUNC,
class ARGS_01,
699struct Function_InvokerUtil_IsFuncInvocableImp<VOID_TYPE, RET, FUNC, ARGS_01,
706#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_A >= 4
707template <
class VOID_TYPE,
class RET,
class FUNC,
class ARGS_01,
711struct Function_InvokerUtil_IsFuncInvocableImp<VOID_TYPE, RET, FUNC, ARGS_01,
719#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_A >= 5
720template <
class VOID_TYPE,
class RET,
class FUNC,
class ARGS_01,
725struct Function_InvokerUtil_IsFuncInvocableImp<VOID_TYPE, RET, FUNC, ARGS_01,
734#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_A >= 6
735template <
class VOID_TYPE,
class RET,
class FUNC,
class ARGS_01,
741struct Function_InvokerUtil_IsFuncInvocableImp<VOID_TYPE, RET, FUNC, ARGS_01,
751#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_A >= 7
752template <
class VOID_TYPE,
class RET,
class FUNC,
class ARGS_01,
759struct Function_InvokerUtil_IsFuncInvocableImp<VOID_TYPE, RET, FUNC, ARGS_01,
770#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_A >= 8
771template <
class VOID_TYPE,
class RET,
class FUNC,
class ARGS_01,
779struct Function_InvokerUtil_IsFuncInvocableImp<VOID_TYPE, RET, FUNC, ARGS_01,
791#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_A >= 9
792template <
class VOID_TYPE,
class RET,
class FUNC,
class ARGS_01,
801struct Function_InvokerUtil_IsFuncInvocableImp<VOID_TYPE, RET, FUNC, ARGS_01,
814#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_A >= 10
815template <
class VOID_TYPE,
class RET,
class FUNC,
class ARGS_01,
825struct Function_InvokerUtil_IsFuncInvocableImp<VOID_TYPE, RET, FUNC, ARGS_01,
839#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_A >= 11
840template <
class VOID_TYPE,
class RET,
class FUNC,
class ARGS_01,
851struct Function_InvokerUtil_IsFuncInvocableImp<VOID_TYPE, RET, FUNC, ARGS_01,
866#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_A >= 12
867template <
class VOID_TYPE,
class RET,
class FUNC,
class ARGS_01,
879struct Function_InvokerUtil_IsFuncInvocableImp<VOID_TYPE, RET, FUNC, ARGS_01,
895#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_A >= 13
896template <
class VOID_TYPE,
class RET,
class FUNC,
class ARGS_01,
909struct Function_InvokerUtil_IsFuncInvocableImp<VOID_TYPE, RET, FUNC, ARGS_01,
927#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_A >= 0
928template <
class RET,
class FUNC>
929struct Function_InvokerUtil_IsFuncInvocableImp<
930 typename
bslmf::VoidType<
931 typename Function_InvokerUtil_ResultType<FUNC>::type>::type,
935 bsl::is_void<RET>::value,
937 Function_InvokerUtil_IsExplicitlyConvertible<
938 typename Function_InvokerUtil_ResultType<FUNC>::type,
943#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_A >= 1
944template <
class RET,
class FUNC,
class ARGS_01>
945struct Function_InvokerUtil_IsFuncInvocableImp<
946 typename
bslmf::VoidType<
947 typename Function_InvokerUtil_ResultType<FUNC, ARGS_01>::type>::type,
952 bsl::is_void<RET>::value,
954 Function_InvokerUtil_IsExplicitlyConvertible<
955 typename Function_InvokerUtil_ResultType<FUNC, ARGS_01>::type,
960#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_A >= 2
961template <
class RET,
class FUNC,
class ARGS_01,
963struct Function_InvokerUtil_IsFuncInvocableImp<
964 typename
bslmf::VoidType<
965 typename Function_InvokerUtil_ResultType<FUNC, ARGS_01,
966 ARGS_02>::type>::type,
972 bsl::is_void<RET>::value,
974 Function_InvokerUtil_IsExplicitlyConvertible<
975 typename Function_InvokerUtil_ResultType<FUNC, ARGS_01,
981#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_A >= 3
982template <
class RET,
class FUNC,
class ARGS_01,
985struct Function_InvokerUtil_IsFuncInvocableImp<
986 typename
bslmf::VoidType<
987 typename Function_InvokerUtil_ResultType<FUNC, ARGS_01,
989 ARGS_03>::type>::type,
996 bsl::is_void<RET>::value,
998 Function_InvokerUtil_IsExplicitlyConvertible<
999 typename Function_InvokerUtil_ResultType<FUNC, ARGS_01,
1006#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_A >= 4
1007template <
class RET,
class FUNC,
class ARGS_01,
1011struct Function_InvokerUtil_IsFuncInvocableImp<
1012 typename
bslmf::VoidType<
1013 typename Function_InvokerUtil_ResultType<FUNC, ARGS_01,
1016 ARGS_04>::type>::type,
1024 bsl::is_void<RET>::value,
1026 Function_InvokerUtil_IsExplicitlyConvertible<
1027 typename Function_InvokerUtil_ResultType<FUNC, ARGS_01,
1035#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_A >= 5
1036template <
class RET,
class FUNC,
class ARGS_01,
1041struct Function_InvokerUtil_IsFuncInvocableImp<
1042 typename
bslmf::VoidType<
1043 typename Function_InvokerUtil_ResultType<FUNC, ARGS_01,
1047 ARGS_05>::type>::type,
1056 bsl::is_void<RET>::value,
1058 Function_InvokerUtil_IsExplicitlyConvertible<
1059 typename Function_InvokerUtil_ResultType<FUNC, ARGS_01,
1068#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_A >= 6
1069template <
class RET,
class FUNC,
class ARGS_01,
1075struct Function_InvokerUtil_IsFuncInvocableImp<
1076 typename
bslmf::VoidType<
1077 typename Function_InvokerUtil_ResultType<FUNC, ARGS_01,
1082 ARGS_06>::type>::type,
1092 bsl::is_void<RET>::value,
1094 Function_InvokerUtil_IsExplicitlyConvertible<
1095 typename Function_InvokerUtil_ResultType<FUNC, ARGS_01,
1105#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_A >= 7
1106template <
class RET,
class FUNC,
class ARGS_01,
1113struct Function_InvokerUtil_IsFuncInvocableImp<
1114 typename
bslmf::VoidType<
1115 typename Function_InvokerUtil_ResultType<FUNC, ARGS_01,
1121 ARGS_07>::type>::type,
1132 bsl::is_void<RET>::value,
1134 Function_InvokerUtil_IsExplicitlyConvertible<
1135 typename Function_InvokerUtil_ResultType<FUNC, ARGS_01,
1146#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_A >= 8
1147template <
class RET,
class FUNC,
class ARGS_01,
1155struct Function_InvokerUtil_IsFuncInvocableImp<
1156 typename
bslmf::VoidType<
1157 typename Function_InvokerUtil_ResultType<FUNC, ARGS_01,
1164 ARGS_08>::type>::type,
1176 bsl::is_void<RET>::value,
1178 Function_InvokerUtil_IsExplicitlyConvertible<
1179 typename Function_InvokerUtil_ResultType<FUNC, ARGS_01,
1191#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_A >= 9
1192template <
class RET,
class FUNC,
class ARGS_01,
1201struct Function_InvokerUtil_IsFuncInvocableImp<
1202 typename
bslmf::VoidType<
1203 typename Function_InvokerUtil_ResultType<FUNC, ARGS_01,
1211 ARGS_09>::type>::type,
1224 bsl::is_void<RET>::value,
1226 Function_InvokerUtil_IsExplicitlyConvertible<
1227 typename Function_InvokerUtil_ResultType<FUNC, ARGS_01,
1240#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_A >= 10
1241template <
class RET,
class FUNC,
class ARGS_01,
1251struct Function_InvokerUtil_IsFuncInvocableImp<
1252 typename
bslmf::VoidType<
1253 typename Function_InvokerUtil_ResultType<FUNC, ARGS_01,
1262 ARGS_10>::type>::type,
1276 bsl::is_void<RET>::value,
1278 Function_InvokerUtil_IsExplicitlyConvertible<
1279 typename Function_InvokerUtil_ResultType<FUNC, ARGS_01,
1293#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_A >= 11
1294template <
class RET,
class FUNC,
class ARGS_01,
1305struct Function_InvokerUtil_IsFuncInvocableImp<
1306 typename
bslmf::VoidType<
1307 typename Function_InvokerUtil_ResultType<FUNC, ARGS_01,
1317 ARGS_11>::type>::type,
1332 bsl::is_void<RET>::value,
1334 Function_InvokerUtil_IsExplicitlyConvertible<
1335 typename Function_InvokerUtil_ResultType<FUNC, ARGS_01,
1350#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_A >= 12
1351template <
class RET,
class FUNC,
class ARGS_01,
1363struct Function_InvokerUtil_IsFuncInvocableImp<
1364 typename
bslmf::VoidType<
1365 typename Function_InvokerUtil_ResultType<FUNC, ARGS_01,
1376 ARGS_12>::type>::type,
1392 bsl::is_void<RET>::value,
1394 Function_InvokerUtil_IsExplicitlyConvertible<
1395 typename Function_InvokerUtil_ResultType<FUNC, ARGS_01,
1411#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_A >= 13
1412template <
class RET,
class FUNC,
class ARGS_01,
1425struct Function_InvokerUtil_IsFuncInvocableImp<
1426 typename
bslmf::VoidType<
1427 typename Function_InvokerUtil_ResultType<FUNC, ARGS_01,
1439 ARGS_13>::type>::type,
1456 bsl::is_void<RET>::value,
1458 Function_InvokerUtil_IsExplicitlyConvertible<
1459 typename Function_InvokerUtil_ResultType<FUNC, ARGS_01,
1478template <
class VOID_TYPE,
1480#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_A >= 0
1481 ,
class ARGS_0 = BSLS_COMPILERFEATURES_NILT
1484#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_A >= 1
1485 ,
class ARGS_1 = BSLS_COMPILERFEATURES_NILT
1488#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_A >= 2
1489 ,
class ARGS_2 = BSLS_COMPILERFEATURES_NILT
1492#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_A >= 3
1493 ,
class ARGS_3 = BSLS_COMPILERFEATURES_NILT
1496#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_A >= 4
1497 ,
class ARGS_4 = BSLS_COMPILERFEATURES_NILT
1500#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_A >= 5
1501 ,
class ARGS_5 = BSLS_COMPILERFEATURES_NILT
1504#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_A >= 6
1505 ,
class ARGS_6 = BSLS_COMPILERFEATURES_NILT
1508#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_A >= 7
1509 ,
class ARGS_7 = BSLS_COMPILERFEATURES_NILT
1512#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_A >= 8
1513 ,
class ARGS_8 = BSLS_COMPILERFEATURES_NILT
1516#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_A >= 9
1517 ,
class ARGS_9 = BSLS_COMPILERFEATURES_NILT
1520#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_A >= 10
1521 ,
class ARGS_10 = BSLS_COMPILERFEATURES_NILT
1524#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_A >= 11
1525 ,
class ARGS_11 = BSLS_COMPILERFEATURES_NILT
1528#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_A >= 12
1529 ,
class ARGS_12 = BSLS_COMPILERFEATURES_NILT
1531 ,
class = BSLS_COMPILERFEATURES_NILT>
1532struct Function_InvokerUtil_ResultTypeImp;
1535#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_A >= 0
1536template <
class FUNC>
1537struct Function_InvokerUtil_ResultType<FUNC>
1538: Function_InvokerUtil_ResultTypeImp<void, FUNC> {
1542#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_A >= 1
1543template <
class FUNC,
class ARGS_01>
1544struct Function_InvokerUtil_ResultType<FUNC, ARGS_01>
1545: Function_InvokerUtil_ResultTypeImp<void, FUNC, ARGS_01> {
1549#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_A >= 2
1550template <
class FUNC,
class ARGS_01,
1552struct Function_InvokerUtil_ResultType<FUNC, ARGS_01,
1554: Function_InvokerUtil_ResultTypeImp<void, FUNC, ARGS_01,
1559#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_A >= 3
1560template <
class FUNC,
class ARGS_01,
1563struct Function_InvokerUtil_ResultType<FUNC, ARGS_01,
1566: Function_InvokerUtil_ResultTypeImp<void, FUNC, ARGS_01,
1572#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_A >= 4
1573template <
class FUNC,
class ARGS_01,
1577struct Function_InvokerUtil_ResultType<FUNC, ARGS_01,
1581: Function_InvokerUtil_ResultTypeImp<void, FUNC, ARGS_01,
1588#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_A >= 5
1589template <
class FUNC,
class ARGS_01,
1594struct Function_InvokerUtil_ResultType<FUNC, ARGS_01,
1599: Function_InvokerUtil_ResultTypeImp<void, FUNC, ARGS_01,
1607#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_A >= 6
1608template <
class FUNC,
class ARGS_01,
1614struct Function_InvokerUtil_ResultType<FUNC, ARGS_01,
1620: Function_InvokerUtil_ResultTypeImp<void, FUNC, ARGS_01,
1629#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_A >= 7
1630template <
class FUNC,
class ARGS_01,
1637struct Function_InvokerUtil_ResultType<FUNC, ARGS_01,
1644: Function_InvokerUtil_ResultTypeImp<void, FUNC, ARGS_01,
1654#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_A >= 8
1655template <
class FUNC,
class ARGS_01,
1663struct Function_InvokerUtil_ResultType<FUNC, ARGS_01,
1671: Function_InvokerUtil_ResultTypeImp<void, FUNC, ARGS_01,
1682#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_A >= 9
1683template <
class FUNC,
class ARGS_01,
1692struct Function_InvokerUtil_ResultType<FUNC, ARGS_01,
1701: Function_InvokerUtil_ResultTypeImp<void, FUNC, ARGS_01,
1713#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_A >= 10
1714template <
class FUNC,
class ARGS_01,
1724struct Function_InvokerUtil_ResultType<FUNC, ARGS_01,
1734: Function_InvokerUtil_ResultTypeImp<void, FUNC, ARGS_01,
1747#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_A >= 11
1748template <
class FUNC,
class ARGS_01,
1759struct Function_InvokerUtil_ResultType<FUNC, ARGS_01,
1770: Function_InvokerUtil_ResultTypeImp<void, FUNC, ARGS_01,
1784#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_A >= 12
1785template <
class FUNC,
class ARGS_01,
1797struct Function_InvokerUtil_ResultType<FUNC, ARGS_01,
1809: Function_InvokerUtil_ResultTypeImp<void, FUNC, ARGS_01,
1824#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_A >= 13
1825template <
class FUNC,
class ARGS_01,
1838struct Function_InvokerUtil_ResultType<FUNC, ARGS_01,
1851: Function_InvokerUtil_ResultTypeImp<void, FUNC, ARGS_01,
1869#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_A >= 0
1870template <
class VOID_TYPE,
class FUNC>
1871struct Function_InvokerUtil_ResultTypeImp<VOID_TYPE, FUNC> {
1875#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_A >= 1
1876template <
class VOID_TYPE,
class FUNC,
class ARGS_01>
1877struct Function_InvokerUtil_ResultTypeImp<VOID_TYPE, FUNC, ARGS_01> {
1881#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_A >= 2
1882template <
class VOID_TYPE,
class FUNC,
class ARGS_01,
1884struct Function_InvokerUtil_ResultTypeImp<VOID_TYPE, FUNC, ARGS_01,
1889#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_A >= 3
1890template <
class VOID_TYPE,
class FUNC,
class ARGS_01,
1893struct Function_InvokerUtil_ResultTypeImp<VOID_TYPE, FUNC, ARGS_01,
1899#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_A >= 4
1900template <
class VOID_TYPE,
class FUNC,
class ARGS_01,
1904struct Function_InvokerUtil_ResultTypeImp<VOID_TYPE, FUNC, ARGS_01,
1911#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_A >= 5
1912template <
class VOID_TYPE,
class FUNC,
class ARGS_01,
1917struct Function_InvokerUtil_ResultTypeImp<VOID_TYPE, FUNC, ARGS_01,
1925#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_A >= 6
1926template <
class VOID_TYPE,
class FUNC,
class ARGS_01,
1932struct Function_InvokerUtil_ResultTypeImp<VOID_TYPE, FUNC, ARGS_01,
1941#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_A >= 7
1942template <
class VOID_TYPE,
class FUNC,
class ARGS_01,
1949struct Function_InvokerUtil_ResultTypeImp<VOID_TYPE, FUNC, ARGS_01,
1959#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_A >= 8
1960template <
class VOID_TYPE,
class FUNC,
class ARGS_01,
1968struct Function_InvokerUtil_ResultTypeImp<VOID_TYPE, FUNC, ARGS_01,
1979#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_A >= 9
1980template <
class VOID_TYPE,
class FUNC,
class ARGS_01,
1989struct Function_InvokerUtil_ResultTypeImp<VOID_TYPE, FUNC, ARGS_01,
2001#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_A >= 10
2002template <
class VOID_TYPE,
class FUNC,
class ARGS_01,
2012struct Function_InvokerUtil_ResultTypeImp<VOID_TYPE, FUNC, ARGS_01,
2025#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_A >= 11
2026template <
class VOID_TYPE,
class FUNC,
class ARGS_01,
2037struct Function_InvokerUtil_ResultTypeImp<VOID_TYPE, FUNC, ARGS_01,
2051#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_A >= 12
2052template <
class VOID_TYPE,
class FUNC,
class ARGS_01,
2064struct Function_InvokerUtil_ResultTypeImp<VOID_TYPE, FUNC, ARGS_01,
2079#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_A >= 13
2080template <
class VOID_TYPE,
class FUNC,
class ARGS_01,
2093struct Function_InvokerUtil_ResultTypeImp<VOID_TYPE, FUNC, ARGS_01,
2110#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_A >= 0
2111template <
class FUNC>
2112struct Function_InvokerUtil_ResultTypeImp<
2113 typename
bslmf::VoidType<
2117 typename bsl::add_lvalue_reference<typename bslalg::NothrowMovableUtil::
2118 UnwrappedType<FUNC>::type>::type> {
2123#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_A >= 1
2124template <
class FUNC,
class ARGS_01>
2125struct Function_InvokerUtil_ResultTypeImp<
2126 typename
bslmf::VoidType<
2127 typename Function_InvokerUtil_ForwardType<ARGS_01>::Type>::type,
2131 typename bsl::add_lvalue_reference<typename bslalg::NothrowMovableUtil::
2132 UnwrappedType<FUNC>::type>::type,
2133 typename Function_InvokerUtil_ForwardType<ARGS_01>::Type> {
2138#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_A >= 2
2139template <
class FUNC,
class ARGS_01,
2141struct Function_InvokerUtil_ResultTypeImp<
2142 typename
bslmf::VoidType<
2143 typename Function_InvokerUtil_ForwardType<ARGS_01>::Type,
2144 typename Function_InvokerUtil_ForwardType<ARGS_02>::Type>::type,
2149 typename bsl::add_lvalue_reference<typename bslalg::NothrowMovableUtil::
2150 UnwrappedType<FUNC>::type>::type,
2151 typename Function_InvokerUtil_ForwardType<ARGS_01>::Type,
2152 typename Function_InvokerUtil_ForwardType<ARGS_02>::Type> {
2157#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_A >= 3
2158template <
class FUNC,
class ARGS_01,
2161struct Function_InvokerUtil_ResultTypeImp<
2162 typename
bslmf::VoidType<
2163 typename Function_InvokerUtil_ForwardType<ARGS_01>::Type,
2164 typename Function_InvokerUtil_ForwardType<ARGS_02>::Type,
2165 typename Function_InvokerUtil_ForwardType<ARGS_03>::Type>::type,
2171 typename bsl::add_lvalue_reference<typename bslalg::NothrowMovableUtil::
2172 UnwrappedType<FUNC>::type>::type,
2173 typename Function_InvokerUtil_ForwardType<ARGS_01>::Type,
2174 typename Function_InvokerUtil_ForwardType<ARGS_02>::Type,
2175 typename Function_InvokerUtil_ForwardType<ARGS_03>::Type> {
2180#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_A >= 4
2181template <
class FUNC,
class ARGS_01,
2185struct Function_InvokerUtil_ResultTypeImp<
2186 typename
bslmf::VoidType<
2187 typename Function_InvokerUtil_ForwardType<ARGS_01>::Type,
2188 typename Function_InvokerUtil_ForwardType<ARGS_02>::Type,
2189 typename Function_InvokerUtil_ForwardType<ARGS_03>::Type,
2190 typename Function_InvokerUtil_ForwardType<ARGS_04>::Type>::type,
2197 typename bsl::add_lvalue_reference<typename bslalg::NothrowMovableUtil::
2198 UnwrappedType<FUNC>::type>::type,
2199 typename Function_InvokerUtil_ForwardType<ARGS_01>::Type,
2200 typename Function_InvokerUtil_ForwardType<ARGS_02>::Type,
2201 typename Function_InvokerUtil_ForwardType<ARGS_03>::Type,
2202 typename Function_InvokerUtil_ForwardType<ARGS_04>::Type> {
2207#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_A >= 5
2208template <
class FUNC,
class ARGS_01,
2213struct Function_InvokerUtil_ResultTypeImp<
2214 typename
bslmf::VoidType<
2215 typename Function_InvokerUtil_ForwardType<ARGS_01>::Type,
2216 typename Function_InvokerUtil_ForwardType<ARGS_02>::Type,
2217 typename Function_InvokerUtil_ForwardType<ARGS_03>::Type,
2218 typename Function_InvokerUtil_ForwardType<ARGS_04>::Type,
2219 typename Function_InvokerUtil_ForwardType<ARGS_05>::Type>::type,
2227 typename bsl::add_lvalue_reference<typename bslalg::NothrowMovableUtil::
2228 UnwrappedType<FUNC>::type>::type,
2229 typename Function_InvokerUtil_ForwardType<ARGS_01>::Type,
2230 typename Function_InvokerUtil_ForwardType<ARGS_02>::Type,
2231 typename Function_InvokerUtil_ForwardType<ARGS_03>::Type,
2232 typename Function_InvokerUtil_ForwardType<ARGS_04>::Type,
2233 typename Function_InvokerUtil_ForwardType<ARGS_05>::Type> {
2238#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_A >= 6
2239template <
class FUNC,
class ARGS_01,
2245struct Function_InvokerUtil_ResultTypeImp<
2246 typename
bslmf::VoidType<
2247 typename Function_InvokerUtil_ForwardType<ARGS_01>::Type,
2248 typename Function_InvokerUtil_ForwardType<ARGS_02>::Type,
2249 typename Function_InvokerUtil_ForwardType<ARGS_03>::Type,
2250 typename Function_InvokerUtil_ForwardType<ARGS_04>::Type,
2251 typename Function_InvokerUtil_ForwardType<ARGS_05>::Type,
2252 typename Function_InvokerUtil_ForwardType<ARGS_06>::Type>::type,
2261 typename bsl::add_lvalue_reference<typename bslalg::NothrowMovableUtil::
2262 UnwrappedType<FUNC>::type>::type,
2263 typename Function_InvokerUtil_ForwardType<ARGS_01>::Type,
2264 typename Function_InvokerUtil_ForwardType<ARGS_02>::Type,
2265 typename Function_InvokerUtil_ForwardType<ARGS_03>::Type,
2266 typename Function_InvokerUtil_ForwardType<ARGS_04>::Type,
2267 typename Function_InvokerUtil_ForwardType<ARGS_05>::Type,
2268 typename Function_InvokerUtil_ForwardType<ARGS_06>::Type> {
2273#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_A >= 7
2274template <
class FUNC,
class ARGS_01,
2281struct Function_InvokerUtil_ResultTypeImp<
2282 typename
bslmf::VoidType<
2283 typename Function_InvokerUtil_ForwardType<ARGS_01>::Type,
2284 typename Function_InvokerUtil_ForwardType<ARGS_02>::Type,
2285 typename Function_InvokerUtil_ForwardType<ARGS_03>::Type,
2286 typename Function_InvokerUtil_ForwardType<ARGS_04>::Type,
2287 typename Function_InvokerUtil_ForwardType<ARGS_05>::Type,
2288 typename Function_InvokerUtil_ForwardType<ARGS_06>::Type,
2289 typename Function_InvokerUtil_ForwardType<ARGS_07>::Type>::type,
2299 typename bsl::add_lvalue_reference<typename bslalg::NothrowMovableUtil::
2300 UnwrappedType<FUNC>::type>::type,
2301 typename Function_InvokerUtil_ForwardType<ARGS_01>::Type,
2302 typename Function_InvokerUtil_ForwardType<ARGS_02>::Type,
2303 typename Function_InvokerUtil_ForwardType<ARGS_03>::Type,
2304 typename Function_InvokerUtil_ForwardType<ARGS_04>::Type,
2305 typename Function_InvokerUtil_ForwardType<ARGS_05>::Type,
2306 typename Function_InvokerUtil_ForwardType<ARGS_06>::Type,
2307 typename Function_InvokerUtil_ForwardType<ARGS_07>::Type> {
2312#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_A >= 8
2313template <
class FUNC,
class ARGS_01,
2321struct Function_InvokerUtil_ResultTypeImp<
2322 typename
bslmf::VoidType<
2323 typename Function_InvokerUtil_ForwardType<ARGS_01>::Type,
2324 typename Function_InvokerUtil_ForwardType<ARGS_02>::Type,
2325 typename Function_InvokerUtil_ForwardType<ARGS_03>::Type,
2326 typename Function_InvokerUtil_ForwardType<ARGS_04>::Type,
2327 typename Function_InvokerUtil_ForwardType<ARGS_05>::Type,
2328 typename Function_InvokerUtil_ForwardType<ARGS_06>::Type,
2329 typename Function_InvokerUtil_ForwardType<ARGS_07>::Type,
2330 typename Function_InvokerUtil_ForwardType<ARGS_08>::Type>::type,
2341 typename bsl::add_lvalue_reference<typename bslalg::NothrowMovableUtil::
2342 UnwrappedType<FUNC>::type>::type,
2343 typename Function_InvokerUtil_ForwardType<ARGS_01>::Type,
2344 typename Function_InvokerUtil_ForwardType<ARGS_02>::Type,
2345 typename Function_InvokerUtil_ForwardType<ARGS_03>::Type,
2346 typename Function_InvokerUtil_ForwardType<ARGS_04>::Type,
2347 typename Function_InvokerUtil_ForwardType<ARGS_05>::Type,
2348 typename Function_InvokerUtil_ForwardType<ARGS_06>::Type,
2349 typename Function_InvokerUtil_ForwardType<ARGS_07>::Type,
2350 typename Function_InvokerUtil_ForwardType<ARGS_08>::Type> {
2355#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_A >= 9
2356template <
class FUNC,
class ARGS_01,
2365struct Function_InvokerUtil_ResultTypeImp<
2366 typename
bslmf::VoidType<
2367 typename Function_InvokerUtil_ForwardType<ARGS_01>::Type,
2368 typename Function_InvokerUtil_ForwardType<ARGS_02>::Type,
2369 typename Function_InvokerUtil_ForwardType<ARGS_03>::Type,
2370 typename Function_InvokerUtil_ForwardType<ARGS_04>::Type,
2371 typename Function_InvokerUtil_ForwardType<ARGS_05>::Type,
2372 typename Function_InvokerUtil_ForwardType<ARGS_06>::Type,
2373 typename Function_InvokerUtil_ForwardType<ARGS_07>::Type,
2374 typename Function_InvokerUtil_ForwardType<ARGS_08>::Type,
2375 typename Function_InvokerUtil_ForwardType<ARGS_09>::Type>::type,
2387 typename bsl::add_lvalue_reference<typename bslalg::NothrowMovableUtil::
2388 UnwrappedType<FUNC>::type>::type,
2389 typename Function_InvokerUtil_ForwardType<ARGS_01>::Type,
2390 typename Function_InvokerUtil_ForwardType<ARGS_02>::Type,
2391 typename Function_InvokerUtil_ForwardType<ARGS_03>::Type,
2392 typename Function_InvokerUtil_ForwardType<ARGS_04>::Type,
2393 typename Function_InvokerUtil_ForwardType<ARGS_05>::Type,
2394 typename Function_InvokerUtil_ForwardType<ARGS_06>::Type,
2395 typename Function_InvokerUtil_ForwardType<ARGS_07>::Type,
2396 typename Function_InvokerUtil_ForwardType<ARGS_08>::Type,
2397 typename Function_InvokerUtil_ForwardType<ARGS_09>::Type> {
2402#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_A >= 10
2403template <
class FUNC,
class ARGS_01,
2413struct Function_InvokerUtil_ResultTypeImp<
2414 typename
bslmf::VoidType<
2415 typename Function_InvokerUtil_ForwardType<ARGS_01>::Type,
2416 typename Function_InvokerUtil_ForwardType<ARGS_02>::Type,
2417 typename Function_InvokerUtil_ForwardType<ARGS_03>::Type,
2418 typename Function_InvokerUtil_ForwardType<ARGS_04>::Type,
2419 typename Function_InvokerUtil_ForwardType<ARGS_05>::Type,
2420 typename Function_InvokerUtil_ForwardType<ARGS_06>::Type,
2421 typename Function_InvokerUtil_ForwardType<ARGS_07>::Type,
2422 typename Function_InvokerUtil_ForwardType<ARGS_08>::Type,
2423 typename Function_InvokerUtil_ForwardType<ARGS_09>::Type,
2424 typename Function_InvokerUtil_ForwardType<ARGS_10>::Type>::type,
2437 typename bsl::add_lvalue_reference<typename bslalg::NothrowMovableUtil::
2438 UnwrappedType<FUNC>::type>::type,
2439 typename Function_InvokerUtil_ForwardType<ARGS_01>::Type,
2440 typename Function_InvokerUtil_ForwardType<ARGS_02>::Type,
2441 typename Function_InvokerUtil_ForwardType<ARGS_03>::Type,
2442 typename Function_InvokerUtil_ForwardType<ARGS_04>::Type,
2443 typename Function_InvokerUtil_ForwardType<ARGS_05>::Type,
2444 typename Function_InvokerUtil_ForwardType<ARGS_06>::Type,
2445 typename Function_InvokerUtil_ForwardType<ARGS_07>::Type,
2446 typename Function_InvokerUtil_ForwardType<ARGS_08>::Type,
2447 typename Function_InvokerUtil_ForwardType<ARGS_09>::Type,
2448 typename Function_InvokerUtil_ForwardType<ARGS_10>::Type> {
2453#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_A >= 11
2454template <
class FUNC,
class ARGS_01,
2465struct Function_InvokerUtil_ResultTypeImp<
2466 typename
bslmf::VoidType<
2467 typename Function_InvokerUtil_ForwardType<ARGS_01>::Type,
2468 typename Function_InvokerUtil_ForwardType<ARGS_02>::Type,
2469 typename Function_InvokerUtil_ForwardType<ARGS_03>::Type,
2470 typename Function_InvokerUtil_ForwardType<ARGS_04>::Type,
2471 typename Function_InvokerUtil_ForwardType<ARGS_05>::Type,
2472 typename Function_InvokerUtil_ForwardType<ARGS_06>::Type,
2473 typename Function_InvokerUtil_ForwardType<ARGS_07>::Type,
2474 typename Function_InvokerUtil_ForwardType<ARGS_08>::Type,
2475 typename Function_InvokerUtil_ForwardType<ARGS_09>::Type,
2476 typename Function_InvokerUtil_ForwardType<ARGS_10>::Type,
2477 typename Function_InvokerUtil_ForwardType<ARGS_11>::Type>::type,
2491 typename bsl::add_lvalue_reference<typename bslalg::NothrowMovableUtil::
2492 UnwrappedType<FUNC>::type>::type,
2493 typename Function_InvokerUtil_ForwardType<ARGS_01>::Type,
2494 typename Function_InvokerUtil_ForwardType<ARGS_02>::Type,
2495 typename Function_InvokerUtil_ForwardType<ARGS_03>::Type,
2496 typename Function_InvokerUtil_ForwardType<ARGS_04>::Type,
2497 typename Function_InvokerUtil_ForwardType<ARGS_05>::Type,
2498 typename Function_InvokerUtil_ForwardType<ARGS_06>::Type,
2499 typename Function_InvokerUtil_ForwardType<ARGS_07>::Type,
2500 typename Function_InvokerUtil_ForwardType<ARGS_08>::Type,
2501 typename Function_InvokerUtil_ForwardType<ARGS_09>::Type,
2502 typename Function_InvokerUtil_ForwardType<ARGS_10>::Type,
2503 typename Function_InvokerUtil_ForwardType<ARGS_11>::Type> {
2508#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_A >= 12
2509template <
class FUNC,
class ARGS_01,
2521struct Function_InvokerUtil_ResultTypeImp<
2522 typename
bslmf::VoidType<
2523 typename Function_InvokerUtil_ForwardType<ARGS_01>::Type,
2524 typename Function_InvokerUtil_ForwardType<ARGS_02>::Type,
2525 typename Function_InvokerUtil_ForwardType<ARGS_03>::Type,
2526 typename Function_InvokerUtil_ForwardType<ARGS_04>::Type,
2527 typename Function_InvokerUtil_ForwardType<ARGS_05>::Type,
2528 typename Function_InvokerUtil_ForwardType<ARGS_06>::Type,
2529 typename Function_InvokerUtil_ForwardType<ARGS_07>::Type,
2530 typename Function_InvokerUtil_ForwardType<ARGS_08>::Type,
2531 typename Function_InvokerUtil_ForwardType<ARGS_09>::Type,
2532 typename Function_InvokerUtil_ForwardType<ARGS_10>::Type,
2533 typename Function_InvokerUtil_ForwardType<ARGS_11>::Type,
2534 typename Function_InvokerUtil_ForwardType<ARGS_12>::Type>::type,
2549 typename bsl::add_lvalue_reference<typename bslalg::NothrowMovableUtil::
2550 UnwrappedType<FUNC>::type>::type,
2551 typename Function_InvokerUtil_ForwardType<ARGS_01>::Type,
2552 typename Function_InvokerUtil_ForwardType<ARGS_02>::Type,
2553 typename Function_InvokerUtil_ForwardType<ARGS_03>::Type,
2554 typename Function_InvokerUtil_ForwardType<ARGS_04>::Type,
2555 typename Function_InvokerUtil_ForwardType<ARGS_05>::Type,
2556 typename Function_InvokerUtil_ForwardType<ARGS_06>::Type,
2557 typename Function_InvokerUtil_ForwardType<ARGS_07>::Type,
2558 typename Function_InvokerUtil_ForwardType<ARGS_08>::Type,
2559 typename Function_InvokerUtil_ForwardType<ARGS_09>::Type,
2560 typename Function_InvokerUtil_ForwardType<ARGS_10>::Type,
2561 typename Function_InvokerUtil_ForwardType<ARGS_11>::Type,
2562 typename Function_InvokerUtil_ForwardType<ARGS_12>::Type> {
2567#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_A >= 13
2568template <
class FUNC,
class ARGS_01,
2581struct Function_InvokerUtil_ResultTypeImp<
2582 typename
bslmf::VoidType<
2583 typename Function_InvokerUtil_ForwardType<ARGS_01>::Type,
2584 typename Function_InvokerUtil_ForwardType<ARGS_02>::Type,
2585 typename Function_InvokerUtil_ForwardType<ARGS_03>::Type,
2586 typename Function_InvokerUtil_ForwardType<ARGS_04>::Type,
2587 typename Function_InvokerUtil_ForwardType<ARGS_05>::Type,
2588 typename Function_InvokerUtil_ForwardType<ARGS_06>::Type,
2589 typename Function_InvokerUtil_ForwardType<ARGS_07>::Type,
2590 typename Function_InvokerUtil_ForwardType<ARGS_08>::Type,
2591 typename Function_InvokerUtil_ForwardType<ARGS_09>::Type,
2592 typename Function_InvokerUtil_ForwardType<ARGS_10>::Type,
2593 typename Function_InvokerUtil_ForwardType<ARGS_11>::Type,
2594 typename Function_InvokerUtil_ForwardType<ARGS_12>::Type,
2595 typename Function_InvokerUtil_ForwardType<ARGS_13>::Type>::type,
2611 typename bsl::add_lvalue_reference<typename bslalg::NothrowMovableUtil::
2612 UnwrappedType<FUNC>::type>::type,
2613 typename Function_InvokerUtil_ForwardType<ARGS_01>::Type,
2614 typename Function_InvokerUtil_ForwardType<ARGS_02>::Type,
2615 typename Function_InvokerUtil_ForwardType<ARGS_03>::Type,
2616 typename Function_InvokerUtil_ForwardType<ARGS_04>::Type,
2617 typename Function_InvokerUtil_ForwardType<ARGS_05>::Type,
2618 typename Function_InvokerUtil_ForwardType<ARGS_06>::Type,
2619 typename Function_InvokerUtil_ForwardType<ARGS_07>::Type,
2620 typename Function_InvokerUtil_ForwardType<ARGS_08>::Type,
2621 typename Function_InvokerUtil_ForwardType<ARGS_09>::Type,
2622 typename Function_InvokerUtil_ForwardType<ARGS_10>::Type,
2623 typename Function_InvokerUtil_ForwardType<ARGS_11>::Type,
2624 typename Function_InvokerUtil_ForwardType<ARGS_12>::Type,
2625 typename Function_InvokerUtil_ForwardType<ARGS_13>::Type> {
2632template <
class VOID_TYPE,
class ARG>
2633struct Function_InvokerUtil_ForwardTypeImp;
2636struct Function_InvokerUtil_ForwardType
2637: Function_InvokerUtil_ForwardTypeImp<void, ARG> {
2641template <
class VOID_TYPE,
class ARG>
2642struct Function_InvokerUtil_ForwardTypeImp {
2646struct Function_InvokerUtil_ForwardTypeImp<
2647 typename
bslmf::VoidType<decltype(
2648 bslmf::ForwardingTypeUtil<ARG>::forwardToTarget(
2649 std::declval<typename bsl::add_lvalue_reference<
2650 typename bslmf::ForwardingType<ARG>::Type>::type>()))>::type,
2660template <
class VOID_TYPE,
class FROM,
class TO>
2661struct Function_InvokerUtil_IsExplicitlyConvertibleImp;
2663template <
class FROM,
class TO>
2664struct Function_InvokerUtil_IsExplicitlyConvertible
2665: Function_InvokerUtil_IsExplicitlyConvertibleImp<void, FROM, TO> {
2668template <
class FROM_TO>
2669struct Function_InvokerUtil_IsExplicitlyConvertible<FROM_TO, FROM_TO>
2674template <
class VOID_TYPE,
class FROM,
class TO>
2675struct Function_InvokerUtil_IsExplicitlyConvertibleImp :
bsl::false_type {
2678template <
class FROM,
class TO>
2679struct Function_InvokerUtil_IsExplicitlyConvertibleImp<
2680 typename
bslmf::VoidType<decltype(
2681 static_cast<TO>(std::declval<FROM>()))>::type,
2692#ifdef BSLSTL_FUNCTION_INVOKERUTIL_SUPPORT_IS_FUNC_INVOCABLE
2694template <
class VOID_TYPE,
class RET,
class FUNC,
class... ARGS>
2695struct Function_InvokerUtil_IsFuncInvocableImp;
2697template <
class RET,
class FUNC,
class... ARGS>
2698struct Function_InvokerUtil_IsFuncInvocable<RET(ARGS...), FUNC>
2699: Function_InvokerUtil_IsFuncInvocableImp<void, RET, FUNC, ARGS...> {
2704struct Function_InvokerUtil_ForwardType;
2706template <
class FROM,
class TO>
2707struct Function_InvokerUtil_IsExplicitlyConvertible;
2709template <
class FUNC,
class... ARGS>
2710struct Function_InvokerUtil_ResultType;
2712template <
class VOID_TYPE,
class RET,
class FUNC,
class... ARGS>
2716template <
class RET,
class FUNC,
class... ARGS>
2717struct Function_InvokerUtil_IsFuncInvocableImp<
2718 typename
bslmf::VoidType<
2719 typename Function_InvokerUtil_ResultType<FUNC, ARGS...>::type>::type,
2724 bsl::is_void<RET>::value,
2726 Function_InvokerUtil_IsExplicitlyConvertible<
2727 typename Function_InvokerUtil_ResultType<FUNC, ARGS...>::type,
2732template <
class VOID_TYPE,
class FUNC,
class... ARGS>
2733struct Function_InvokerUtil_ResultTypeImp;
2735template <
class FUNC,
class... ARGS>
2736struct Function_InvokerUtil_ResultType
2737: Function_InvokerUtil_ResultTypeImp<void, FUNC, ARGS...> {
2741template <
class VOID_TYPE,
class FUNC,
class... ARGS>
2742struct Function_InvokerUtil_ResultTypeImp {
2745template <
class FUNC,
class... ARGS>
2746struct Function_InvokerUtil_ResultTypeImp<
2747 typename
bslmf::VoidType<
2748 typename Function_InvokerUtil_ForwardType<ARGS>::Type...>::type,
2752 typename bsl::add_lvalue_reference<typename bslalg::NothrowMovableUtil::
2753 UnwrappedType<FUNC>::type>::type,
2754 typename Function_InvokerUtil_ForwardType<ARGS>::Type...> {
2759template <
class VOID_TYPE,
class ARG>
2760struct Function_InvokerUtil_ForwardTypeImp;
2763struct Function_InvokerUtil_ForwardType
2764: Function_InvokerUtil_ForwardTypeImp<void, ARG> {
2768template <
class VOID_TYPE,
class ARG>
2769struct Function_InvokerUtil_ForwardTypeImp {
2773struct Function_InvokerUtil_ForwardTypeImp<
2774 typename
bslmf::VoidType<decltype(
2775 bslmf::ForwardingTypeUtil<ARG>::forwardToTarget(
2776 std::declval<typename bsl::add_lvalue_reference<
2777 typename bslmf::ForwardingType<ARG>::Type>::type>()))>::type,
2787template <
class VOID_TYPE,
class FROM,
class TO>
2788struct Function_InvokerUtil_IsExplicitlyConvertibleImp;
2790template <
class FROM,
class TO>
2791struct Function_InvokerUtil_IsExplicitlyConvertible
2792: Function_InvokerUtil_IsExplicitlyConvertibleImp<void, FROM, TO> {
2795template <
class FROM_TO>
2796struct Function_InvokerUtil_IsExplicitlyConvertible<FROM_TO, FROM_TO>
2801template <
class VOID_TYPE,
class FROM,
class TO>
2802struct Function_InvokerUtil_IsExplicitlyConvertibleImp :
bsl::false_type {
2805template <
class FROM,
class TO>
2806struct Function_InvokerUtil_IsExplicitlyConvertibleImp<
2807 typename
bslmf::VoidType<decltype(
2808 static_cast<TO>(std::declval<FROM>()))>::type,
2830template <
int INVOCATION_TYPE,
class PROTOTYPE,
class FUNC>
2831struct Function_InvokerUtil_Dispatch;
2833#if BSLS_COMPILERFEATURES_SIMULATE_VARIADIC_TEMPLATES
2836#ifndef BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT
2837#define BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT 13
2839#ifndef BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_B
2840#define BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_B BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT
2844#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_B >= 0
2845template <
class FUNC,
class RET>
2846struct Function_InvokerUtil_Dispatch<Function_InvokerUtil::e_FunctionPtr,
2850 static RET invoke(
const Function_Rep *rep);
2854#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_B >= 1
2855template <
class FUNC,
class RET,
class ARGS_01>
2856struct Function_InvokerUtil_Dispatch<Function_InvokerUtil::e_FunctionPtr,
2857 RET(ARGS_01), FUNC> {
2860 static RET invoke(
const Function_Rep *rep,
2865#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_B >= 2
2866template <
class FUNC,
class RET,
class ARGS_01,
2868struct Function_InvokerUtil_Dispatch<Function_InvokerUtil::e_FunctionPtr,
2873 static RET invoke(
const Function_Rep *rep,
2879#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_B >= 3
2880template <
class FUNC,
class RET,
class ARGS_01,
2883struct Function_InvokerUtil_Dispatch<Function_InvokerUtil::e_FunctionPtr,
2889 static RET invoke(
const Function_Rep *rep,
2896#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_B >= 4
2897template <
class FUNC,
class RET,
class ARGS_01,
2901struct Function_InvokerUtil_Dispatch<Function_InvokerUtil::e_FunctionPtr,
2908 static RET invoke(
const Function_Rep *rep,
2916#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_B >= 5
2917template <
class FUNC,
class RET,
class ARGS_01,
2922struct Function_InvokerUtil_Dispatch<Function_InvokerUtil::e_FunctionPtr,
2930 static RET invoke(
const Function_Rep *rep,
2939#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_B >= 6
2940template <
class FUNC,
class RET,
class ARGS_01,
2946struct Function_InvokerUtil_Dispatch<Function_InvokerUtil::e_FunctionPtr,
2955 static RET invoke(
const Function_Rep *rep,
2965#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_B >= 7
2966template <
class FUNC,
class RET,
class ARGS_01,
2973struct Function_InvokerUtil_Dispatch<Function_InvokerUtil::e_FunctionPtr,
2983 static RET invoke(
const Function_Rep *rep,
2994#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_B >= 8
2995template <
class FUNC,
class RET,
class ARGS_01,
3003struct Function_InvokerUtil_Dispatch<Function_InvokerUtil::e_FunctionPtr,
3014 static RET invoke(
const Function_Rep *rep,
3026#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_B >= 9
3027template <
class FUNC,
class RET,
class ARGS_01,
3036struct Function_InvokerUtil_Dispatch<Function_InvokerUtil::e_FunctionPtr,
3048 static RET invoke(
const Function_Rep *rep,
3061#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_B >= 10
3062template <
class FUNC,
class RET,
class ARGS_01,
3072struct Function_InvokerUtil_Dispatch<Function_InvokerUtil::e_FunctionPtr,
3085 static RET invoke(
const Function_Rep *rep,
3099#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_B >= 11
3100template <
class FUNC,
class RET,
class ARGS_01,
3111struct Function_InvokerUtil_Dispatch<Function_InvokerUtil::e_FunctionPtr,
3125 static RET invoke(
const Function_Rep *rep,
3140#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_B >= 12
3141template <
class FUNC,
class RET,
class ARGS_01,
3153struct Function_InvokerUtil_Dispatch<Function_InvokerUtil::e_FunctionPtr,
3168 static RET invoke(
const Function_Rep *rep,
3184#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_B >= 13
3185template <
class FUNC,
class RET,
class ARGS_01,
3198struct Function_InvokerUtil_Dispatch<Function_InvokerUtil::e_FunctionPtr,
3214 static RET invoke(
const Function_Rep *rep,
3232#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_B >= 0
3233template <
class FUNC,
class RET,
class ARG0>
3234struct Function_InvokerUtil_Dispatch<Function_InvokerUtil::e_MemFunctionPtr,
3249 static RET invoke(
const Function_Rep *rep,
3254#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_B >= 1
3255template <
class FUNC,
class RET,
class ARG0,
class ARGS_01>
3256struct Function_InvokerUtil_Dispatch<Function_InvokerUtil::e_MemFunctionPtr,
3257 RET(ARG0, ARGS_01), FUNC> {
3273 static RET invoke(
const Function_Rep *rep,
3279#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_B >= 2
3280template <
class FUNC,
class RET,
class ARG0,
class ARGS_01,
3282struct Function_InvokerUtil_Dispatch<Function_InvokerUtil::e_MemFunctionPtr,
3302 static RET invoke(
const Function_Rep *rep,
3309#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_B >= 3
3310template <
class FUNC,
class RET,
class ARG0,
class ARGS_01,
3313struct Function_InvokerUtil_Dispatch<Function_InvokerUtil::e_MemFunctionPtr,
3336 static RET invoke(
const Function_Rep *rep,
3344#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_B >= 4
3345template <
class FUNC,
class RET,
class ARG0,
class ARGS_01,
3349struct Function_InvokerUtil_Dispatch<Function_InvokerUtil::e_MemFunctionPtr,
3375 static RET invoke(
const Function_Rep *rep,
3384#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_B >= 5
3385template <
class FUNC,
class RET,
class ARG0,
class ARGS_01,
3390struct Function_InvokerUtil_Dispatch<Function_InvokerUtil::e_MemFunctionPtr,
3419 static RET invoke(
const Function_Rep *rep,
3429#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_B >= 6
3430template <
class FUNC,
class RET,
class ARG0,
class ARGS_01,
3436struct Function_InvokerUtil_Dispatch<Function_InvokerUtil::e_MemFunctionPtr,
3468 static RET invoke(
const Function_Rep *rep,
3479#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_B >= 7
3480template <
class FUNC,
class RET,
class ARG0,
class ARGS_01,
3487struct Function_InvokerUtil_Dispatch<Function_InvokerUtil::e_MemFunctionPtr,
3522 static RET invoke(
const Function_Rep *rep,
3534#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_B >= 8
3535template <
class FUNC,
class RET,
class ARG0,
class ARGS_01,
3543struct Function_InvokerUtil_Dispatch<Function_InvokerUtil::e_MemFunctionPtr,
3581 static RET invoke(
const Function_Rep *rep,
3594#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_B >= 9
3595template <
class FUNC,
class RET,
class ARG0,
class ARGS_01,
3604struct Function_InvokerUtil_Dispatch<Function_InvokerUtil::e_MemFunctionPtr,
3645 static RET invoke(
const Function_Rep *rep,
3659#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_B >= 10
3660template <
class FUNC,
class RET,
class ARG0,
class ARGS_01,
3670struct Function_InvokerUtil_Dispatch<Function_InvokerUtil::e_MemFunctionPtr,
3714 static RET invoke(
const Function_Rep *rep,
3729#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_B >= 11
3730template <
class FUNC,
class RET,
class ARG0,
class ARGS_01,
3741struct Function_InvokerUtil_Dispatch<Function_InvokerUtil::e_MemFunctionPtr,
3788 static RET invoke(
const Function_Rep *rep,
3804#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_B >= 12
3805template <
class FUNC,
class RET,
class ARG0,
class ARGS_01,
3817struct Function_InvokerUtil_Dispatch<Function_InvokerUtil::e_MemFunctionPtr,
3867 static RET invoke(
const Function_Rep *rep,
3884#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_B >= 13
3885template <
class FUNC,
class RET,
class ARG0,
class ARGS_01,
3898struct Function_InvokerUtil_Dispatch<Function_InvokerUtil::e_MemFunctionPtr,
3951 static RET invoke(
const Function_Rep *rep,
3970template <
class MEMBER_TYPE,
class CLASS_TYPE,
class RET,
class ARG0>
3971struct Function_InvokerUtil_Dispatch<Function_InvokerUtil::e_MemDataPtr,
3972 RET(ARG0), MEMBER_TYPE CLASS_TYPE::*> {
3974 typedef MEMBER_TYPE CLASS_TYPE::* Func;
3986 static RET invoke(
const Function_Rep *rep,
3990#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_B >= 0
3991template <
class FUNC,
class RET>
3992struct Function_InvokerUtil_Dispatch<Function_InvokerUtil::e_InplaceFunctor,
3996 static RET invoke(
const Function_Rep *rep);
4000#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_B >= 1
4001template <
class FUNC,
class RET,
class ARGS_01>
4002struct Function_InvokerUtil_Dispatch<Function_InvokerUtil::e_InplaceFunctor,
4003 RET(ARGS_01), FUNC> {
4006 static RET invoke(
const Function_Rep *rep,
4011#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_B >= 2
4012template <
class FUNC,
class RET,
class ARGS_01,
4014struct Function_InvokerUtil_Dispatch<Function_InvokerUtil::e_InplaceFunctor,
4019 static RET invoke(
const Function_Rep *rep,
4025#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_B >= 3
4026template <
class FUNC,
class RET,
class ARGS_01,
4029struct Function_InvokerUtil_Dispatch<Function_InvokerUtil::e_InplaceFunctor,
4035 static RET invoke(
const Function_Rep *rep,
4042#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_B >= 4
4043template <
class FUNC,
class RET,
class ARGS_01,
4047struct Function_InvokerUtil_Dispatch<Function_InvokerUtil::e_InplaceFunctor,
4054 static RET invoke(
const Function_Rep *rep,
4062#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_B >= 5
4063template <
class FUNC,
class RET,
class ARGS_01,
4068struct Function_InvokerUtil_Dispatch<Function_InvokerUtil::e_InplaceFunctor,
4076 static RET invoke(
const Function_Rep *rep,
4085#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_B >= 6
4086template <
class FUNC,
class RET,
class ARGS_01,
4092struct Function_InvokerUtil_Dispatch<Function_InvokerUtil::e_InplaceFunctor,
4101 static RET invoke(
const Function_Rep *rep,
4111#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_B >= 7
4112template <
class FUNC,
class RET,
class ARGS_01,
4119struct Function_InvokerUtil_Dispatch<Function_InvokerUtil::e_InplaceFunctor,
4129 static RET invoke(
const Function_Rep *rep,
4140#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_B >= 8
4141template <
class FUNC,
class RET,
class ARGS_01,
4149struct Function_InvokerUtil_Dispatch<Function_InvokerUtil::e_InplaceFunctor,
4160 static RET invoke(
const Function_Rep *rep,
4172#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_B >= 9
4173template <
class FUNC,
class RET,
class ARGS_01,
4182struct Function_InvokerUtil_Dispatch<Function_InvokerUtil::e_InplaceFunctor,
4194 static RET invoke(
const Function_Rep *rep,
4207#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_B >= 10
4208template <
class FUNC,
class RET,
class ARGS_01,
4218struct Function_InvokerUtil_Dispatch<Function_InvokerUtil::e_InplaceFunctor,
4231 static RET invoke(
const Function_Rep *rep,
4245#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_B >= 11
4246template <
class FUNC,
class RET,
class ARGS_01,
4257struct Function_InvokerUtil_Dispatch<Function_InvokerUtil::e_InplaceFunctor,
4271 static RET invoke(
const Function_Rep *rep,
4286#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_B >= 12
4287template <
class FUNC,
class RET,
class ARGS_01,
4299struct Function_InvokerUtil_Dispatch<Function_InvokerUtil::e_InplaceFunctor,
4314 static RET invoke(
const Function_Rep *rep,
4330#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_B >= 13
4331template <
class FUNC,
class RET,
class ARGS_01,
4344struct Function_InvokerUtil_Dispatch<Function_InvokerUtil::e_InplaceFunctor,
4360 static RET invoke(
const Function_Rep *rep,
4378#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_B >= 0
4379template <
class FUNC,
class RET>
4380struct Function_InvokerUtil_Dispatch<Function_InvokerUtil::e_OutofplaceFunctor,
4384 static RET invoke(
const Function_Rep *rep);
4388#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_B >= 1
4389template <
class FUNC,
class RET,
class ARGS_01>
4390struct Function_InvokerUtil_Dispatch<Function_InvokerUtil::e_OutofplaceFunctor,
4391 RET(ARGS_01), FUNC> {
4394 static RET invoke(
const Function_Rep *rep,
4399#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_B >= 2
4400template <
class FUNC,
class RET,
class ARGS_01,
4402struct Function_InvokerUtil_Dispatch<Function_InvokerUtil::e_OutofplaceFunctor,
4407 static RET invoke(
const Function_Rep *rep,
4413#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_B >= 3
4414template <
class FUNC,
class RET,
class ARGS_01,
4417struct Function_InvokerUtil_Dispatch<Function_InvokerUtil::e_OutofplaceFunctor,
4423 static RET invoke(
const Function_Rep *rep,
4430#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_B >= 4
4431template <
class FUNC,
class RET,
class ARGS_01,
4435struct Function_InvokerUtil_Dispatch<Function_InvokerUtil::e_OutofplaceFunctor,
4442 static RET invoke(
const Function_Rep *rep,
4450#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_B >= 5
4451template <
class FUNC,
class RET,
class ARGS_01,
4456struct Function_InvokerUtil_Dispatch<Function_InvokerUtil::e_OutofplaceFunctor,
4464 static RET invoke(
const Function_Rep *rep,
4473#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_B >= 6
4474template <
class FUNC,
class RET,
class ARGS_01,
4480struct Function_InvokerUtil_Dispatch<Function_InvokerUtil::e_OutofplaceFunctor,
4489 static RET invoke(
const Function_Rep *rep,
4499#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_B >= 7
4500template <
class FUNC,
class RET,
class ARGS_01,
4507struct Function_InvokerUtil_Dispatch<Function_InvokerUtil::e_OutofplaceFunctor,
4517 static RET invoke(
const Function_Rep *rep,
4528#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_B >= 8
4529template <
class FUNC,
class RET,
class ARGS_01,
4537struct Function_InvokerUtil_Dispatch<Function_InvokerUtil::e_OutofplaceFunctor,
4548 static RET invoke(
const Function_Rep *rep,
4560#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_B >= 9
4561template <
class FUNC,
class RET,
class ARGS_01,
4570struct Function_InvokerUtil_Dispatch<Function_InvokerUtil::e_OutofplaceFunctor,
4582 static RET invoke(
const Function_Rep *rep,
4595#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_B >= 10
4596template <
class FUNC,
class RET,
class ARGS_01,
4606struct Function_InvokerUtil_Dispatch<Function_InvokerUtil::e_OutofplaceFunctor,
4619 static RET invoke(
const Function_Rep *rep,
4633#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_B >= 11
4634template <
class FUNC,
class RET,
class ARGS_01,
4645struct Function_InvokerUtil_Dispatch<Function_InvokerUtil::e_OutofplaceFunctor,
4659 static RET invoke(
const Function_Rep *rep,
4674#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_B >= 12
4675template <
class FUNC,
class RET,
class ARGS_01,
4687struct Function_InvokerUtil_Dispatch<Function_InvokerUtil::e_OutofplaceFunctor,
4702 static RET invoke(
const Function_Rep *rep,
4718#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_B >= 13
4719template <
class FUNC,
class RET,
class ARGS_01,
4732struct Function_InvokerUtil_Dispatch<Function_InvokerUtil::e_OutofplaceFunctor,
4748 static RET invoke(
const Function_Rep *rep,
4770template <
class FUNC,
class RET,
class... ARGS>
4771struct Function_InvokerUtil_Dispatch<Function_InvokerUtil::e_FunctionPtr,
4772 RET(ARGS...), FUNC> {
4775 static RET invoke(
const Function_Rep *rep,
4779template <
class FUNC,
class RET,
class ARG0,
class... ARGS>
4780struct Function_InvokerUtil_Dispatch<Function_InvokerUtil::e_MemFunctionPtr,
4781 RET(ARG0, ARGS...), FUNC> {
4797 static RET invoke(
const Function_Rep *rep,
4802template <
class MEMBER_TYPE,
class CLASS_TYPE,
class RET,
class ARG0>
4803struct Function_InvokerUtil_Dispatch<Function_InvokerUtil::e_MemDataPtr,
4804 RET(ARG0), MEMBER_TYPE CLASS_TYPE::*> {
4806 typedef MEMBER_TYPE CLASS_TYPE::* Func;
4818 static RET invoke(
const Function_Rep *rep,
4822template <
class FUNC,
class RET,
class... ARGS>
4823struct Function_InvokerUtil_Dispatch<Function_InvokerUtil::e_InplaceFunctor,
4824 RET(ARGS...), FUNC> {
4827 static RET invoke(
const Function_Rep *rep,
4831template <
class FUNC,
class RET,
class... ARGS>
4832struct Function_InvokerUtil_Dispatch<Function_InvokerUtil::e_OutofplaceFunctor,
4833 RET(ARGS...), FUNC> {
4836 static RET invoke(
const Function_Rep *rep,
4851template <
class PROTOTYPE>
4859template <
class PROTOTYPE,
class FUNC>
4873 static const int k_INVOCATION_TYPE =
4877 Soo::IsInplaceFunc<FUNC>::value ? e_InplaceFunctor :
4878 e_OutofplaceFunctor;
4881 typedef Function_InvokerUtilNullCheck<UwFuncType> NullCheckerClass;
4884 typedef Function_InvokerUtil_Dispatch<k_INVOCATION_TYPE,
4886 UwFuncType> DispatcherClass;
4900 &DispatcherClass::invoke);
4909template <
class FUNC>
4916template <
class FUNC>
4923template <
class CLASS,
class MEMTYPE>
4936#if BSLS_COMPILERFEATURES_SIMULATE_VARIADIC_TEMPLATES
4939#ifndef BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT
4940#define BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT 13
4942#ifndef BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_C
4943#define BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_C BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT
4946#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_C >= 0
4947template <
class FUNC,
class RET>
4949Function_InvokerUtil_Dispatch<Function_InvokerUtil::e_FunctionPtr,
4951invoke(
const Function_Rep *rep)
4953 FUNC f = *rep->targetRaw<FUNC,
true>();
4962#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_C >= 1
4963template <
class FUNC,
class RET,
class ARGS_01>
4965Function_InvokerUtil_Dispatch<Function_InvokerUtil::e_FunctionPtr,
4966 RET(ARGS_01), FUNC>::
4967invoke(
const Function_Rep *rep,
4970 FUNC f = *rep->targetRaw<FUNC,
true>();
4979#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_C >= 2
4980template <
class FUNC,
class RET,
class ARGS_01,
4983Function_InvokerUtil_Dispatch<Function_InvokerUtil::e_FunctionPtr,
4986invoke(
const Function_Rep *rep,
4990 FUNC f = *rep->targetRaw<FUNC,
true>();
5000#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_C >= 3
5001template <
class FUNC,
class RET,
class ARGS_01,
5005Function_InvokerUtil_Dispatch<Function_InvokerUtil::e_FunctionPtr,
5009invoke(
const Function_Rep *rep,
5014 FUNC f = *rep->targetRaw<FUNC,
true>();
5025#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_C >= 4
5026template <
class FUNC,
class RET,
class ARGS_01,
5031Function_InvokerUtil_Dispatch<Function_InvokerUtil::e_FunctionPtr,
5036invoke(
const Function_Rep *rep,
5042 FUNC f = *rep->targetRaw<FUNC,
true>();
5054#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_C >= 5
5055template <
class FUNC,
class RET,
class ARGS_01,
5061Function_InvokerUtil_Dispatch<Function_InvokerUtil::e_FunctionPtr,
5067invoke(
const Function_Rep *rep,
5074 FUNC f = *rep->targetRaw<FUNC,
true>();
5087#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_C >= 6
5088template <
class FUNC,
class RET,
class ARGS_01,
5095Function_InvokerUtil_Dispatch<Function_InvokerUtil::e_FunctionPtr,
5102invoke(
const Function_Rep *rep,
5110 FUNC f = *rep->targetRaw<FUNC,
true>();
5124#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_C >= 7
5125template <
class FUNC,
class RET,
class ARGS_01,
5133Function_InvokerUtil_Dispatch<Function_InvokerUtil::e_FunctionPtr,
5141invoke(
const Function_Rep *rep,
5150 FUNC f = *rep->targetRaw<FUNC,
true>();
5165#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_C >= 8
5166template <
class FUNC,
class RET,
class ARGS_01,
5175Function_InvokerUtil_Dispatch<Function_InvokerUtil::e_FunctionPtr,
5184invoke(
const Function_Rep *rep,
5194 FUNC f = *rep->targetRaw<FUNC,
true>();
5210#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_C >= 9
5211template <
class FUNC,
class RET,
class ARGS_01,
5221Function_InvokerUtil_Dispatch<Function_InvokerUtil::e_FunctionPtr,
5231invoke(
const Function_Rep *rep,
5242 FUNC f = *rep->targetRaw<FUNC,
true>();
5259#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_C >= 10
5260template <
class FUNC,
class RET,
class ARGS_01,
5271Function_InvokerUtil_Dispatch<Function_InvokerUtil::e_FunctionPtr,
5282invoke(
const Function_Rep *rep,
5294 FUNC f = *rep->targetRaw<FUNC,
true>();
5312#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_C >= 11
5313template <
class FUNC,
class RET,
class ARGS_01,
5325Function_InvokerUtil_Dispatch<Function_InvokerUtil::e_FunctionPtr,
5337invoke(
const Function_Rep *rep,
5350 FUNC f = *rep->targetRaw<FUNC,
true>();
5369#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_C >= 12
5370template <
class FUNC,
class RET,
class ARGS_01,
5383Function_InvokerUtil_Dispatch<Function_InvokerUtil::e_FunctionPtr,
5396invoke(
const Function_Rep *rep,
5410 FUNC f = *rep->targetRaw<FUNC,
true>();
5430#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_C >= 13
5431template <
class FUNC,
class RET,
class ARGS_01,
5445Function_InvokerUtil_Dispatch<Function_InvokerUtil::e_FunctionPtr,
5459invoke(
const Function_Rep *rep,
5474 FUNC f = *rep->targetRaw<FUNC,
true>();
5496#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_C >= 0
5497template <
class FUNC,
class RET,
class ARG0>
5500Function_InvokerUtil_Dispatch<Function_InvokerUtil::e_MemFunctionPtr,
5510 RET, (
const_cast<Arg0Ref
>(obj).*f)(
5515#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_C >= 1
5516template <
class FUNC,
class RET,
class ARG0,
class ARGS_01>
5519Function_InvokerUtil_Dispatch<Function_InvokerUtil::e_MemFunctionPtr,
5520 RET(ARG0, ARGS_01), FUNC>::
5530 RET, (
const_cast<Arg0Ref
>(obj).*f)(
5535#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_C >= 2
5536template <
class FUNC,
class RET,
class ARG0,
class ARGS_01,
5540Function_InvokerUtil_Dispatch<Function_InvokerUtil::e_MemFunctionPtr,
5553 RET, (
const_cast<Arg0Ref
>(obj).*f)(
5559#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_C >= 3
5560template <
class FUNC,
class RET,
class ARG0,
class ARGS_01,
5565Function_InvokerUtil_Dispatch<Function_InvokerUtil::e_MemFunctionPtr,
5580 RET, (
const_cast<Arg0Ref
>(obj).*f)(
5587#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_C >= 4
5588template <
class FUNC,
class RET,
class ARG0,
class ARGS_01,
5594Function_InvokerUtil_Dispatch<Function_InvokerUtil::e_MemFunctionPtr,
5611 RET, (
const_cast<Arg0Ref
>(obj).*f)(
5619#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_C >= 5
5620template <
class FUNC,
class RET,
class ARG0,
class ARGS_01,
5627Function_InvokerUtil_Dispatch<Function_InvokerUtil::e_MemFunctionPtr,
5646 RET, (
const_cast<Arg0Ref
>(obj).*f)(
5655#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_C >= 6
5656template <
class FUNC,
class RET,
class ARG0,
class ARGS_01,
5664Function_InvokerUtil_Dispatch<Function_InvokerUtil::e_MemFunctionPtr,
5685 RET, (
const_cast<Arg0Ref
>(obj).*f)(
5695#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_C >= 7
5696template <
class FUNC,
class RET,
class ARG0,
class ARGS_01,
5705Function_InvokerUtil_Dispatch<Function_InvokerUtil::e_MemFunctionPtr,
5728 RET, (
const_cast<Arg0Ref
>(obj).*f)(
5739#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_C >= 8
5740template <
class FUNC,
class RET,
class ARG0,
class ARGS_01,
5750Function_InvokerUtil_Dispatch<Function_InvokerUtil::e_MemFunctionPtr,
5775 RET, (
const_cast<Arg0Ref
>(obj).*f)(
5787#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_C >= 9
5788template <
class FUNC,
class RET,
class ARG0,
class ARGS_01,
5799Function_InvokerUtil_Dispatch<Function_InvokerUtil::e_MemFunctionPtr,
5826 RET, (
const_cast<Arg0Ref
>(obj).*f)(
5839#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_C >= 10
5840template <
class FUNC,
class RET,
class ARG0,
class ARGS_01,
5852Function_InvokerUtil_Dispatch<Function_InvokerUtil::e_MemFunctionPtr,
5881 RET, (
const_cast<Arg0Ref
>(obj).*f)(
5895#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_C >= 11
5896template <
class FUNC,
class RET,
class ARG0,
class ARGS_01,
5909Function_InvokerUtil_Dispatch<Function_InvokerUtil::e_MemFunctionPtr,
5940 RET, (
const_cast<Arg0Ref
>(obj).*f)(
5955#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_C >= 12
5956template <
class FUNC,
class RET,
class ARG0,
class ARGS_01,
5970Function_InvokerUtil_Dispatch<Function_InvokerUtil::e_MemFunctionPtr,
6003 RET, (
const_cast<Arg0Ref
>(obj).*f)(
6019#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_C >= 13
6020template <
class FUNC,
class RET,
class ARG0,
class ARGS_01,
6035Function_InvokerUtil_Dispatch<Function_InvokerUtil::e_MemFunctionPtr,
6070 RET, (
const_cast<Arg0Ref
>(obj).*f)(
6088#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_C >= 0
6089template <
class FUNC,
class RET,
class ARG0>
6092Function_InvokerUtil_Dispatch<Function_InvokerUtil::e_MemFunctionPtr,
6102 RET, ((*
const_cast<Arg0Ref
>(obj)).*f)(
6107#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_C >= 1
6108template <
class FUNC,
class RET,
class ARG0,
class ARGS_01>
6111Function_InvokerUtil_Dispatch<Function_InvokerUtil::e_MemFunctionPtr,
6112 RET(ARG0, ARGS_01), FUNC>::
6122 RET, ((*
const_cast<Arg0Ref
>(obj)).*f)(
6127#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_C >= 2
6128template <
class FUNC,
class RET,
class ARG0,
class ARGS_01,
6132Function_InvokerUtil_Dispatch<Function_InvokerUtil::e_MemFunctionPtr,
6145 RET, ((*
const_cast<Arg0Ref
>(obj)).*f)(
6151#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_C >= 3
6152template <
class FUNC,
class RET,
class ARG0,
class ARGS_01,
6157Function_InvokerUtil_Dispatch<Function_InvokerUtil::e_MemFunctionPtr,
6172 RET, ((*
const_cast<Arg0Ref
>(obj)).*f)(
6179#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_C >= 4
6180template <
class FUNC,
class RET,
class ARG0,
class ARGS_01,
6186Function_InvokerUtil_Dispatch<Function_InvokerUtil::e_MemFunctionPtr,
6203 RET, ((*
const_cast<Arg0Ref
>(obj)).*f)(
6211#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_C >= 5
6212template <
class FUNC,
class RET,
class ARG0,
class ARGS_01,
6219Function_InvokerUtil_Dispatch<Function_InvokerUtil::e_MemFunctionPtr,
6238 RET, ((*
const_cast<Arg0Ref
>(obj)).*f)(
6247#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_C >= 6
6248template <
class FUNC,
class RET,
class ARG0,
class ARGS_01,
6256Function_InvokerUtil_Dispatch<Function_InvokerUtil::e_MemFunctionPtr,
6277 RET, ((*
const_cast<Arg0Ref
>(obj)).*f)(
6287#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_C >= 7
6288template <
class FUNC,
class RET,
class ARG0,
class ARGS_01,
6297Function_InvokerUtil_Dispatch<Function_InvokerUtil::e_MemFunctionPtr,
6320 RET, ((*
const_cast<Arg0Ref
>(obj)).*f)(
6331#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_C >= 8
6332template <
class FUNC,
class RET,
class ARG0,
class ARGS_01,
6342Function_InvokerUtil_Dispatch<Function_InvokerUtil::e_MemFunctionPtr,
6367 RET, ((*
const_cast<Arg0Ref
>(obj)).*f)(
6379#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_C >= 9
6380template <
class FUNC,
class RET,
class ARG0,
class ARGS_01,
6391Function_InvokerUtil_Dispatch<Function_InvokerUtil::e_MemFunctionPtr,
6418 RET, ((*
const_cast<Arg0Ref
>(obj)).*f)(
6431#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_C >= 10
6432template <
class FUNC,
class RET,
class ARG0,
class ARGS_01,
6444Function_InvokerUtil_Dispatch<Function_InvokerUtil::e_MemFunctionPtr,
6473 RET, ((*
const_cast<Arg0Ref
>(obj)).*f)(
6487#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_C >= 11
6488template <
class FUNC,
class RET,
class ARG0,
class ARGS_01,
6501Function_InvokerUtil_Dispatch<Function_InvokerUtil::e_MemFunctionPtr,
6532 RET, ((*
const_cast<Arg0Ref
>(obj)).*f)(
6547#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_C >= 12
6548template <
class FUNC,
class RET,
class ARG0,
class ARGS_01,
6562Function_InvokerUtil_Dispatch<Function_InvokerUtil::e_MemFunctionPtr,
6595 RET, ((*
const_cast<Arg0Ref
>(obj)).*f)(
6611#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_C >= 13
6612template <
class FUNC,
class RET,
class ARG0,
class ARGS_01,
6627Function_InvokerUtil_Dispatch<Function_InvokerUtil::e_MemFunctionPtr,
6662 RET, ((*
const_cast<Arg0Ref
>(obj)).*f)(
6680#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_C >= 0
6681template <
class FUNC,
class RET,
class ARG0>
6683Function_InvokerUtil_Dispatch<Function_InvokerUtil::e_MemFunctionPtr,
6685invoke(
const Function_Rep *rep,
6696 FUNC f = *rep->targetRaw<FUNC,
true>();
6699 invokeImp(IsDirect(), f, obj));
6703#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_C >= 1
6704template <
class FUNC,
class RET,
class ARG0,
class ARGS_01>
6706Function_InvokerUtil_Dispatch<Function_InvokerUtil::e_MemFunctionPtr,
6707 RET(ARG0, ARGS_01), FUNC>::
6708invoke(
const Function_Rep *rep,
6720 FUNC f = *rep->targetRaw<FUNC,
true>();
6723 invokeImp(IsDirect(), f, obj,
6728#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_C >= 2
6729template <
class FUNC,
class RET,
class ARG0,
class ARGS_01,
6732Function_InvokerUtil_Dispatch<Function_InvokerUtil::e_MemFunctionPtr,
6735invoke(
const Function_Rep *rep,
6748 FUNC f = *rep->targetRaw<FUNC,
true>();
6751 invokeImp(IsDirect(), f, obj,
6757#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_C >= 3
6758template <
class FUNC,
class RET,
class ARG0,
class ARGS_01,
6762Function_InvokerUtil_Dispatch<Function_InvokerUtil::e_MemFunctionPtr,
6766invoke(
const Function_Rep *rep,
6780 FUNC f = *rep->targetRaw<FUNC,
true>();
6783 invokeImp(IsDirect(), f, obj,
6790#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_C >= 4
6791template <
class FUNC,
class RET,
class ARG0,
class ARGS_01,
6796Function_InvokerUtil_Dispatch<Function_InvokerUtil::e_MemFunctionPtr,
6801invoke(
const Function_Rep *rep,
6816 FUNC f = *rep->targetRaw<FUNC,
true>();
6819 invokeImp(IsDirect(), f, obj,
6827#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_C >= 5
6828template <
class FUNC,
class RET,
class ARG0,
class ARGS_01,
6834Function_InvokerUtil_Dispatch<Function_InvokerUtil::e_MemFunctionPtr,
6840invoke(
const Function_Rep *rep,
6856 FUNC f = *rep->targetRaw<FUNC,
true>();
6859 invokeImp(IsDirect(), f, obj,
6868#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_C >= 6
6869template <
class FUNC,
class RET,
class ARG0,
class ARGS_01,
6876Function_InvokerUtil_Dispatch<Function_InvokerUtil::e_MemFunctionPtr,
6883invoke(
const Function_Rep *rep,
6900 FUNC f = *rep->targetRaw<FUNC,
true>();
6903 invokeImp(IsDirect(), f, obj,
6913#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_C >= 7
6914template <
class FUNC,
class RET,
class ARG0,
class ARGS_01,
6922Function_InvokerUtil_Dispatch<Function_InvokerUtil::e_MemFunctionPtr,
6930invoke(
const Function_Rep *rep,
6948 FUNC f = *rep->targetRaw<FUNC,
true>();
6951 invokeImp(IsDirect(), f, obj,
6962#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_C >= 8
6963template <
class FUNC,
class RET,
class ARG0,
class ARGS_01,
6972Function_InvokerUtil_Dispatch<Function_InvokerUtil::e_MemFunctionPtr,
6981invoke(
const Function_Rep *rep,
7000 FUNC f = *rep->targetRaw<FUNC,
true>();
7003 invokeImp(IsDirect(), f, obj,
7015#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_C >= 9
7016template <
class FUNC,
class RET,
class ARG0,
class ARGS_01,
7026Function_InvokerUtil_Dispatch<Function_InvokerUtil::e_MemFunctionPtr,
7036invoke(
const Function_Rep *rep,
7056 FUNC f = *rep->targetRaw<FUNC,
true>();
7059 invokeImp(IsDirect(), f, obj,
7072#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_C >= 10
7073template <
class FUNC,
class RET,
class ARG0,
class ARGS_01,
7084Function_InvokerUtil_Dispatch<Function_InvokerUtil::e_MemFunctionPtr,
7095invoke(
const Function_Rep *rep,
7116 FUNC f = *rep->targetRaw<FUNC,
true>();
7119 invokeImp(IsDirect(), f, obj,
7133#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_C >= 11
7134template <
class FUNC,
class RET,
class ARG0,
class ARGS_01,
7146Function_InvokerUtil_Dispatch<Function_InvokerUtil::e_MemFunctionPtr,
7158invoke(
const Function_Rep *rep,
7180 FUNC f = *rep->targetRaw<FUNC,
true>();
7183 invokeImp(IsDirect(), f, obj,
7198#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_C >= 12
7199template <
class FUNC,
class RET,
class ARG0,
class ARGS_01,
7212Function_InvokerUtil_Dispatch<Function_InvokerUtil::e_MemFunctionPtr,
7225invoke(
const Function_Rep *rep,
7248 FUNC f = *rep->targetRaw<FUNC,
true>();
7251 invokeImp(IsDirect(), f, obj,
7267#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_C >= 13
7268template <
class FUNC,
class RET,
class ARG0,
class ARGS_01,
7282Function_InvokerUtil_Dispatch<Function_InvokerUtil::e_MemFunctionPtr,
7296invoke(
const Function_Rep *rep,
7320 FUNC f = *rep->targetRaw<FUNC,
true>();
7323 invokeImp(IsDirect(), f, obj,
7341template <
class MEMBER_TYPE,
class CLASS_TYPE,
class RET,
class ARG0>
7344Function_InvokerUtil_Dispatch<Function_InvokerUtil::e_MemDataPtr,
7345 RET(ARG0), MEMBER_TYPE CLASS_TYPE::*>::
7354 RET, (
const_cast<Arg0Ref
>(obj).*f));
7357template <
class MEMBER_TYPE,
class CLASS_TYPE,
class RET,
class ARG0>
7360Function_InvokerUtil_Dispatch<Function_InvokerUtil::e_MemDataPtr,
7361 RET(ARG0), MEMBER_TYPE CLASS_TYPE::*>::
7370 RET, ((*
const_cast<Arg0Ref
>(obj)).*f));
7373template <
class MEMBER_TYPE,
class CLASS_TYPE,
class RET,
class ARG0>
7375Function_InvokerUtil_Dispatch<Function_InvokerUtil::e_MemDataPtr,
7376 RET(ARG0), MEMBER_TYPE CLASS_TYPE::*>::
7377invoke(
const Function_Rep *rep,
7382 const volatile CLASS_TYPE *
7385 Func f = *rep->targetRaw<Func,
true>();
7388 RET, invokeImp(IsDirect(), f, obj));
7391#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_C >= 0
7392template <
class FUNC,
class RET>
7394Function_InvokerUtil_Dispatch<Function_InvokerUtil::e_InplaceFunctor,
7396invoke(
const Function_Rep *rep)
7398 FUNC& f = *rep->targetRaw<FUNC,
true>();
7406#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_C >= 1
7407template <
class FUNC,
class RET,
class ARGS_01>
7409Function_InvokerUtil_Dispatch<Function_InvokerUtil::e_InplaceFunctor,
7410 RET(ARGS_01), FUNC>::
7411invoke(
const Function_Rep *rep,
7414 FUNC& f = *rep->targetRaw<FUNC,
true>();
7422#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_C >= 2
7423template <
class FUNC,
class RET,
class ARGS_01,
7426Function_InvokerUtil_Dispatch<Function_InvokerUtil::e_InplaceFunctor,
7429invoke(
const Function_Rep *rep,
7433 FUNC& f = *rep->targetRaw<FUNC,
true>();
7442#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_C >= 3
7443template <
class FUNC,
class RET,
class ARGS_01,
7447Function_InvokerUtil_Dispatch<Function_InvokerUtil::e_InplaceFunctor,
7451invoke(
const Function_Rep *rep,
7456 FUNC& f = *rep->targetRaw<FUNC,
true>();
7466#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_C >= 4
7467template <
class FUNC,
class RET,
class ARGS_01,
7472Function_InvokerUtil_Dispatch<Function_InvokerUtil::e_InplaceFunctor,
7477invoke(
const Function_Rep *rep,
7483 FUNC& f = *rep->targetRaw<FUNC,
true>();
7494#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_C >= 5
7495template <
class FUNC,
class RET,
class ARGS_01,
7501Function_InvokerUtil_Dispatch<Function_InvokerUtil::e_InplaceFunctor,
7507invoke(
const Function_Rep *rep,
7514 FUNC& f = *rep->targetRaw<FUNC,
true>();
7526#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_C >= 6
7527template <
class FUNC,
class RET,
class ARGS_01,
7534Function_InvokerUtil_Dispatch<Function_InvokerUtil::e_InplaceFunctor,
7541invoke(
const Function_Rep *rep,
7549 FUNC& f = *rep->targetRaw<FUNC,
true>();
7562#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_C >= 7
7563template <
class FUNC,
class RET,
class ARGS_01,
7571Function_InvokerUtil_Dispatch<Function_InvokerUtil::e_InplaceFunctor,
7579invoke(
const Function_Rep *rep,
7588 FUNC& f = *rep->targetRaw<FUNC,
true>();
7602#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_C >= 8
7603template <
class FUNC,
class RET,
class ARGS_01,
7612Function_InvokerUtil_Dispatch<Function_InvokerUtil::e_InplaceFunctor,
7621invoke(
const Function_Rep *rep,
7631 FUNC& f = *rep->targetRaw<FUNC,
true>();
7646#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_C >= 9
7647template <
class FUNC,
class RET,
class ARGS_01,
7657Function_InvokerUtil_Dispatch<Function_InvokerUtil::e_InplaceFunctor,
7667invoke(
const Function_Rep *rep,
7678 FUNC& f = *rep->targetRaw<FUNC,
true>();
7694#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_C >= 10
7695template <
class FUNC,
class RET,
class ARGS_01,
7706Function_InvokerUtil_Dispatch<Function_InvokerUtil::e_InplaceFunctor,
7717invoke(
const Function_Rep *rep,
7729 FUNC& f = *rep->targetRaw<FUNC,
true>();
7746#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_C >= 11
7747template <
class FUNC,
class RET,
class ARGS_01,
7759Function_InvokerUtil_Dispatch<Function_InvokerUtil::e_InplaceFunctor,
7771invoke(
const Function_Rep *rep,
7784 FUNC& f = *rep->targetRaw<FUNC,
true>();
7802#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_C >= 12
7803template <
class FUNC,
class RET,
class ARGS_01,
7816Function_InvokerUtil_Dispatch<Function_InvokerUtil::e_InplaceFunctor,
7829invoke(
const Function_Rep *rep,
7843 FUNC& f = *rep->targetRaw<FUNC,
true>();
7862#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_C >= 13
7863template <
class FUNC,
class RET,
class ARGS_01,
7877Function_InvokerUtil_Dispatch<Function_InvokerUtil::e_InplaceFunctor,
7891invoke(
const Function_Rep *rep,
7906 FUNC& f = *rep->targetRaw<FUNC,
true>();
7927#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_C >= 0
7928template <
class FUNC,
class RET>
7930Function_InvokerUtil_Dispatch<Function_InvokerUtil::e_OutofplaceFunctor,
7932invoke(
const Function_Rep *rep)
7934 FUNC& f = *rep->targetRaw<FUNC,
false>();
7942#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_C >= 1
7943template <
class FUNC,
class RET,
class ARGS_01>
7945Function_InvokerUtil_Dispatch<Function_InvokerUtil::e_OutofplaceFunctor,
7946 RET(ARGS_01), FUNC>::
7947invoke(
const Function_Rep *rep,
7950 FUNC& f = *rep->targetRaw<FUNC,
false>();
7958#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_C >= 2
7959template <
class FUNC,
class RET,
class ARGS_01,
7962Function_InvokerUtil_Dispatch<Function_InvokerUtil::e_OutofplaceFunctor,
7965invoke(
const Function_Rep *rep,
7969 FUNC& f = *rep->targetRaw<FUNC,
false>();
7978#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_C >= 3
7979template <
class FUNC,
class RET,
class ARGS_01,
7983Function_InvokerUtil_Dispatch<Function_InvokerUtil::e_OutofplaceFunctor,
7987invoke(
const Function_Rep *rep,
7992 FUNC& f = *rep->targetRaw<FUNC,
false>();
8002#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_C >= 4
8003template <
class FUNC,
class RET,
class ARGS_01,
8008Function_InvokerUtil_Dispatch<Function_InvokerUtil::e_OutofplaceFunctor,
8013invoke(
const Function_Rep *rep,
8019 FUNC& f = *rep->targetRaw<FUNC,
false>();
8030#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_C >= 5
8031template <
class FUNC,
class RET,
class ARGS_01,
8037Function_InvokerUtil_Dispatch<Function_InvokerUtil::e_OutofplaceFunctor,
8043invoke(
const Function_Rep *rep,
8050 FUNC& f = *rep->targetRaw<FUNC,
false>();
8062#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_C >= 6
8063template <
class FUNC,
class RET,
class ARGS_01,
8070Function_InvokerUtil_Dispatch<Function_InvokerUtil::e_OutofplaceFunctor,
8077invoke(
const Function_Rep *rep,
8085 FUNC& f = *rep->targetRaw<FUNC,
false>();
8098#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_C >= 7
8099template <
class FUNC,
class RET,
class ARGS_01,
8107Function_InvokerUtil_Dispatch<Function_InvokerUtil::e_OutofplaceFunctor,
8115invoke(
const Function_Rep *rep,
8124 FUNC& f = *rep->targetRaw<FUNC,
false>();
8138#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_C >= 8
8139template <
class FUNC,
class RET,
class ARGS_01,
8148Function_InvokerUtil_Dispatch<Function_InvokerUtil::e_OutofplaceFunctor,
8157invoke(
const Function_Rep *rep,
8167 FUNC& f = *rep->targetRaw<FUNC,
false>();
8182#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_C >= 9
8183template <
class FUNC,
class RET,
class ARGS_01,
8193Function_InvokerUtil_Dispatch<Function_InvokerUtil::e_OutofplaceFunctor,
8203invoke(
const Function_Rep *rep,
8214 FUNC& f = *rep->targetRaw<FUNC,
false>();
8230#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_C >= 10
8231template <
class FUNC,
class RET,
class ARGS_01,
8242Function_InvokerUtil_Dispatch<Function_InvokerUtil::e_OutofplaceFunctor,
8253invoke(
const Function_Rep *rep,
8265 FUNC& f = *rep->targetRaw<FUNC,
false>();
8282#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_C >= 11
8283template <
class FUNC,
class RET,
class ARGS_01,
8295Function_InvokerUtil_Dispatch<Function_InvokerUtil::e_OutofplaceFunctor,
8307invoke(
const Function_Rep *rep,
8320 FUNC& f = *rep->targetRaw<FUNC,
false>();
8338#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_C >= 12
8339template <
class FUNC,
class RET,
class ARGS_01,
8352Function_InvokerUtil_Dispatch<Function_InvokerUtil::e_OutofplaceFunctor,
8365invoke(
const Function_Rep *rep,
8379 FUNC& f = *rep->targetRaw<FUNC,
false>();
8398#if BSLSTL_FUNCTION_INVOKERUTIL_VARIADIC_LIMIT_C >= 13
8399template <
class FUNC,
class RET,
class ARGS_01,
8413Function_InvokerUtil_Dispatch<Function_InvokerUtil::e_OutofplaceFunctor,
8427invoke(
const Function_Rep *rep,
8442 FUNC& f = *rep->targetRaw<FUNC,
false>();
8466template <
class FUNC,
class RET,
class... ARGS>
8468Function_InvokerUtil_Dispatch<Function_InvokerUtil::e_FunctionPtr,
8469 RET(ARGS...), FUNC>::
8470invoke(
const Function_Rep *rep,
8473 FUNC f = *rep->targetRaw<FUNC,
true>();
8481template <
class FUNC,
class RET,
class ARG0,
class... ARGS>
8484Function_InvokerUtil_Dispatch<Function_InvokerUtil::e_MemFunctionPtr,
8485 RET(ARG0, ARGS...), FUNC>::
8495 RET, (
const_cast<Arg0Ref
>(obj).*f)(
8499template <
class FUNC,
class RET,
class ARG0,
class... ARGS>
8502Function_InvokerUtil_Dispatch<Function_InvokerUtil::e_MemFunctionPtr,
8503 RET(ARG0, ARGS...), FUNC>::
8513 RET, ((*
const_cast<Arg0Ref
>(obj)).*f)(
8517template <
class FUNC,
class RET,
class ARG0,
class... ARGS>
8519Function_InvokerUtil_Dispatch<Function_InvokerUtil::e_MemFunctionPtr,
8520 RET(ARG0, ARGS...), FUNC>::
8521invoke(
const Function_Rep *rep,
8533 FUNC f = *rep->targetRaw<FUNC,
true>();
8536 invokeImp(IsDirect(), f, obj,
8540template <
class MEMBER_TYPE,
class CLASS_TYPE,
class RET,
class ARG0>
8543Function_InvokerUtil_Dispatch<Function_InvokerUtil::e_MemDataPtr,
8544 RET(ARG0), MEMBER_TYPE CLASS_TYPE::*>::
8553 RET, (
const_cast<Arg0Ref
>(obj).*f));
8556template <
class MEMBER_TYPE,
class CLASS_TYPE,
class RET,
class ARG0>
8559Function_InvokerUtil_Dispatch<Function_InvokerUtil::e_MemDataPtr,
8560 RET(ARG0), MEMBER_TYPE CLASS_TYPE::*>::
8569 RET, ((*
const_cast<Arg0Ref
>(obj)).*f));
8572template <
class MEMBER_TYPE,
class CLASS_TYPE,
class RET,
class ARG0>
8574Function_InvokerUtil_Dispatch<Function_InvokerUtil::e_MemDataPtr,
8575 RET(ARG0), MEMBER_TYPE CLASS_TYPE::*>::
8576invoke(
const Function_Rep *rep,
8581 const volatile CLASS_TYPE *
8584 Func f = *rep->targetRaw<Func,
true>();
8587 RET, invokeImp(IsDirect(), f, obj));
8590template <
class FUNC,
class RET,
class... ARGS>
8592Function_InvokerUtil_Dispatch<Function_InvokerUtil::e_InplaceFunctor,
8593 RET(ARGS...), FUNC>::
8594invoke(
const Function_Rep *rep,
8597 FUNC& f = *rep->targetRaw<FUNC,
true>();
8604template <
class FUNC,
class RET,
class... ARGS>
8606Function_InvokerUtil_Dispatch<Function_InvokerUtil::e_OutofplaceFunctor,
8607 RET(ARGS...), FUNC>::
8608invoke(
const Function_Rep *rep,
8611 FUNC& f = *rep->targetRaw<FUNC,
false>();
8625# error Not valid except when included from bslstl_function_invokerutil.h
Definition bslmf_invokeresult.h:358
Provide a namespace for the forwardToTarget function.
Definition bslmf_forwardingtype.h:454
Imp::Type Type
Definition bslmf_forwardingtype.h:439
void GenericInvoker()
Definition bslstl_function_rep.h:369
Definition bslstl_function_smallobjectoptimization.h:78
#define BSLMF_ASSERT(expr)
Definition bslmf_assert.h:229
#define BSLSTL_FUNCTION_INVOKERUTIL_CAST_RESULT(RET, X)
Definition bslstl_function_invokerutil.h:186
bool isNull(const TYPE &object)
BloombergLP::bsls::Nullptr_Impl::Type nullptr_t
Definition bsls_nullptr.h:281
Definition bdlbb_blob.h:576
Definition bslstl_algorithm.h:82
Definition bslmf_addlvaluereference.h:126
Definition bslmf_conditional.h:120
Definition bslmf_integralconstant.h:244
Definition bslmf_isconvertible.h:867
Definition bslmf_ismemberpointer.h:143
NothrowMovableUtil_Traits< TYPE >::UnwrappedType type
Definition bslalg_nothrowmovableutil.h:370
static UnwrappedType< TYPE >::type & unwrap(TYPE &f)
Definition bslmf_functionpointertraits.h:153
Definition bslmf_memberfunctionpointertraits.h:164
Definition bslmf_memberfunctionpointertraits.h:150
t_TYPE type
Definition bslmf_movableref.h:1177
static bool isNull(const FUNC &)
Return false.
Definition bslstl_function_invokerutil.h:803
@ e_Null
Definition bslstl_function_invokerutil.h:222
@ e_MemDataPtr
Definition bslstl_function_invokerutil.h:225
@ e_FunctionPtr
Definition bslstl_function_invokerutil.h:223
@ e_InplaceFunctor
Definition bslstl_function_invokerutil.h:226
@ e_OutofplaceFunctor
Definition bslstl_function_invokerutil.h:227
@ e_MemFunctionPtr
Definition bslstl_function_invokerutil.h:224
static GenericInvoker * invokerForFunc(const bsl::nullptr_t &)
Function_Rep::GenericInvoker GenericInvoker
Definition bslstl_function_invokerutil.h:232