8#ifndef INCLUDED_BSLMF_INVOKERESULT
9#define INCLUDED_BSLMF_INVOKERESULT
242#include <bslscm_version.h>
274#if BSLS_COMPILERFEATURES_SIMULATE_CPP11_FEATURES
280# define COMPILING_BSLMF_INVOKERESULT_H
282# undef COMPILING_BSLMF_INVOKERESULT_H
287# if defined(BSLS_COMPILERFEATURES_SUPPORT_DECLTYPE)
291# define BSLMF_INVOKERESULT_SUPPORT_CPP17_SEMANTICS 1
318 template <
class t_TYPE>
324#if !BSLS_COMPILERFEATURES_SIMULATE_CPP11_FEATURES
327template <
class t_FN,
class... t_ARGTYPES>
328struct InvokeResult_BaseCalcUtil;
341#if !BSLS_COMPILERFEATURES_SIMULATE_CPP11_FEATURES
359template <
class t_FN,
class... t_ARGTYPES>
361:
public BloombergLP::bslmf::InvokeResult_BaseCalcUtil<t_FN, t_ARGTYPES...>::
372#ifdef BSLS_COMPILERFEATURES_SUPPORT_ALIAS_TEMPLATES
380template <
class t_FN,
class... t_ARGTYPES>
381using invoke_result_t =
typename invoke_result<t_FN, t_ARGTYPES...>::type;
395#if !BSLS_COMPILERFEATURES_SIMULATE_CPP11_FEATURES
398template <
bool t_IS_FUNCPTR,
399 bool t_IS_MEMFUNCPTR,
403struct InvokeResult_Imp;
418template <
class t_FN,
class... t_ARGTYPES>
430 k_IS_FUNCPTR = BloombergLP::bslmf::IsFunctionPointer<F>::value,
431 k_IS_MEMFUNCPTR= BloombergLP::bslmf::IsMemberFunctionPointer<F>::value,
455 typedef typename BloombergLP::bslmf::InvokeResult_Imp<k_IS_FUNCPTR,
471struct InvokeResult_VoidChecker :
Tag<true> {
490template <
class t_TYPE>
492operator,(
const t_TYPE&, InvokeResult_VoidChecker);
497struct InvokeResult_Index {
528 e_CONST_VOLATILE_VOIDPTR,
540#ifdef BSLS_COMPILERFEATURES_SUPPORT_UTF8_CHAR_TYPE
544#ifdef BSLS_COMPILERFEATURES_SUPPORT_UNICODE_CHAR_TYPES
568 template <
class t_TP>
570 template <
class t_TP>
578template <
int t_INDEX>
struct InvokeResult_Type;
587struct InvokeResult_Type<InvokeResult_Index::e_VOID>
588 {
typedef void type; };
590struct InvokeResult_Type<InvokeResult_Index::e_BOOL>
591 {
typedef bool type; };
593struct InvokeResult_Type<InvokeResult_Index::e_CHAR>
594 {
typedef char type; };
596struct InvokeResult_Type<InvokeResult_Index::e_SCHAR>
597 {
typedef signed char type; };
599struct InvokeResult_Type<InvokeResult_Index::e_UCHAR>
600 {
typedef unsigned char type; };
601#ifdef BSLS_COMPILERFEATURES_SUPPORT_UTF8_CHAR_TYPE
603struct InvokeResult_Type<InvokeResult_Index::e_CHAR8_T>
604 {
typedef char8_t type; };
607struct InvokeResult_Type<InvokeResult_Index::e_WCHAR_T>
608 {
typedef wchar_t type; };
609#ifdef BSLS_COMPILERFEATURES_SUPPORT_UNICODE_CHAR_TYPES
611struct InvokeResult_Type<InvokeResult_Index::e_CHAR16_T>
612 {
typedef char16_t type; };
614struct InvokeResult_Type<InvokeResult_Index::e_CHAR32_T>
615 {
typedef char32_t type; };
618struct InvokeResult_Type<InvokeResult_Index::e_SHORT>
619 {
typedef short type; };
621struct InvokeResult_Type<InvokeResult_Index::e_USHORT>
622 {
typedef unsigned short type; };
624struct InvokeResult_Type<InvokeResult_Index::e_INT>
625 {
typedef int type; };
627struct InvokeResult_Type<InvokeResult_Index::e_UNSIGNED>
628 {
typedef unsigned type; };
630struct InvokeResult_Type<InvokeResult_Index::e_LONG>
631 {
typedef long type; };
633struct InvokeResult_Type<InvokeResult_Index::e_ULONG>
634 {
typedef unsigned long type; };
636struct InvokeResult_Type<InvokeResult_Index::e_LONG_LONG>
637 {
typedef long long type; };
639struct InvokeResult_Type<InvokeResult_Index::e_ULONG_LONG>
640 {
typedef unsigned long long type; };
642struct InvokeResult_Type<InvokeResult_Index::e_FLOAT>
643 {
typedef float type; };
645struct InvokeResult_Type<InvokeResult_Index::e_DOUBLE>
646 {
typedef double type; };
648struct InvokeResult_Type<InvokeResult_Index::e_LONG_DOUBLE>
649 {
typedef long double type; };
651struct InvokeResult_Type<InvokeResult_Index::e_VOIDPTR>
652 {
typedef void *type; };
654struct InvokeResult_Type<InvokeResult_Index::e_CONST_VOIDPTR>
655 {
typedef const void *type; };
657struct InvokeResult_Type<InvokeResult_Index::e_VOLATILE_VOIDPTR>
658 {
typedef volatile void *type; };
660struct InvokeResult_Type<InvokeResult_Index::e_CONST_VOLATILE_VOIDPTR>
661 {
typedef const volatile void *type; };
663struct InvokeResult_Type<InvokeResult_Index::e_NULLPTR_T>
666struct InvokeResult_Type<InvokeResult_Index::e_POINTER>
667 {
typedef void *type; };
669struct InvokeResult_Type<InvokeResult_Index::e_OTHER>
670 {
typedef InvokeResultDeductionFailed type; };
676struct InvokeResult_ImpUtils
690 template <
class t_TP>
701#ifdef BSLS_COMPILERFEATURES_SUPPORT_RVALUE_REFERENCES
703 template <
class t_TP>
709 template <
class t_TP>
718#ifdef BSLS_COMPILERFEATURES_SUPPORT_RVALUE_REFERENCES
725 template <
class t_SOME_TYPE>
726 static typename bsl::add_rvalue_reference<t_SOME_TYPE>::type myDeclval();
728 template <
class t_SOME_TYPE>
729 static t_SOME_TYPE myDeclval();
747 template <
class t_TP>
749 template <
class t_TP>
758 template <
class t_TP>
760 template <
class t_TP>
762 template <
class t_TP>
764 template <
class t_TP>
769 template <
class t_TP>
770 static t_TP& uncv(
const t_TP&);
771 template <
class t_TP>
772 static t_TP& uncv(
const volatile t_TP&);
779 template <
class t_TP>
780 static t_TP& unpoint(t_TP&);
781 template <
class t_TP>
782 static const t_TP& unpoint(
const t_TP&);
783 template <
class t_TP>
786 template <
class t_TP>
788 unpoint(t_TP *
const&);
789 template <
class t_TP>
791 unpoint(t_TP *
volatile&);
792 template <
class t_TP>
794 unpoint(t_TP *
const volatile&);
810template <
class t_UNQUAL_TYPE,
814struct InvokeResult_AddCVRef {
821 t_UNQUAL_TYPE>::type CQualType;
826 CQualType>::type CVQualType;
833 CVQualType>::type type;
836#if !BSLS_COMPILERFEATURES_SIMULATE_CPP11_FEATURES
838#ifndef BSLMF_INVOKERESULT_SUPPORT_CPP17_SEMANTICS
839template <
bool ,
class t_FN,
class... t_ARGTYPES>
840struct InvokeResult_FunctorDeduction : InvokeResult_ImpUtils {
857 uncv(myDeclval<t_FN>()(myDeclval<t_ARGTYPES>()...)))),
858 k_IS_POINTER = (k_INDEX == InvokeResult_Index::e_POINTER),
860 checkLvalue(myDeclval<t_FN>()(myDeclval<t_ARGTYPES>()...), 0)),
861 k_IS_CONST_PTR = k_IS_POINTER &&
863 myDeclval<t_FN>()(myDeclval<t_ARGTYPES>()...))),
864 k_IS_VOLATILE_PTR = k_IS_POINTER &&
866 myDeclval<t_ARGTYPES>()...))),
868 uncv(unpoint(myDeclval<t_FN>()(myDeclval<t_ARGTYPES>()...))))),
870 unpoint(myDeclval<t_FN>()(myDeclval<t_ARGTYPES>()...)))),
872 unpoint(myDeclval<t_FN>()(myDeclval<t_ARGTYPES>()...)))),
873 k_CANT_DEDUCE_TYPE = (k_TARGET_INDEX ==
874 (
int)InvokeResult_Index::e_OTHER)
878 ! k_CANT_DEDUCE_TYPE,
879 typename InvokeResult_Type<k_TARGET_INDEX>::type,
881 >::type UnqualTargetType;
890 InvokeResult_AddCVRef<UnqualTargetType,
891 static_cast<bool>(k_IS_CONST_TARGET)
892 && !
static_cast<bool>(k_CANT_DEDUCE_TYPE),
893 static_cast<bool>(k_IS_VOLATILE_TARGET)
894 && !
static_cast<bool>(k_CANT_DEDUCE_TYPE),
895 false>::type CVQualTargetType;
903 && !
static_cast<bool>(k_CANT_DEDUCE_TYPE),
905 CVQualTargetType>::type UnqualType;
910 InvokeResult_AddCVRef<
912 static_cast<bool>(k_IS_CONST_PTR)
913 && !
static_cast<bool>(k_CANT_DEDUCE_TYPE),
914 static_cast<bool>(k_IS_VOLATILE_PTR)
915 && !
static_cast<bool>(k_CANT_DEDUCE_TYPE),
916 static_cast<bool>(k_IS_LVALUE)
917 && !
static_cast<bool>(k_CANT_DEDUCE_TYPE)>::type Qtype;
928template <
class t_FN,
class... t_ARGTYPES>
929struct InvokeResult_FunctorDeduction<true , t_FN, t_ARGTYPES...> {
950template <
class t_MEMOF_CLASS,
955struct InvokeResult_MemPtrArgQualifiers {
978template <
class t_MEMOF_CLASS,
class t_ARG_TYPE>
979struct InvokeResult_MemPtrArgQualifiers<t_MEMOF_CLASS, t_ARG_TYPE, false>
980: InvokeResult_ImpUtils {
982#ifdef BSLS_COMPILERFEATURES_SUPPORT_RVALUE_REFERENCES
994 template <
class t_TP>
995 static t_TP& tolvalue(t_TP&&);
1004 checkVolatile(tolvalue(*myDeclval<t_ARG_TYPE>())))};
1012 k_IS_CONST = k_IS_LVALUE &&
1015 *myDeclval<t_ARG_TYPE>()))
1020#if !BSLS_COMPILERFEATURES_SIMULATE_CPP11_FEATURES
1023template <
class t_VOID_TYPE,
class t_FN,
class... t_ARGTYPES>
1024struct InvokeResult_FunctorImp;
1027template <
class t_VOID_TYPE,
class t_FN,
class... t_ARGTYPES>
1028struct InvokeResult_FuncPtrImp;
1031template <
class t_FN,
class... t_ARGTYPES>
1032struct InvokeResult_MemFuncPtrImp;
1035template <
class t_FN,
class... t_ARGTYPES>
1036struct InvokeResult_MemObjPtrImp;
1046template <
bool t_IS_FUNCPTR,
1047 bool t_IS_MEMFUNCPTR,
1048 bool t_IS_MEMOBJPTR,
1050 class... t_ARGTYPES>
1051struct InvokeResult_Imp : InvokeResult_FunctorImp<void, t_FN, t_ARGTYPES...> {
1057template <
class t_FN,
class... t_ARGTYPES>
1058struct InvokeResult_Imp<true ,
1063: InvokeResult_FuncPtrImp<void, t_FN, t_ARGTYPES...> {
1069template <
class t_FN,
class... t_ARGTYPES>
1070struct InvokeResult_Imp<false,
1075: InvokeResult_MemFuncPtrImp<t_FN, t_ARGTYPES...> {
1081template <
class t_FN,
class... t_ARGTYPES>
1082struct InvokeResult_Imp<false,
1087: InvokeResult_MemObjPtrImp<t_FN, t_ARGTYPES...> {
1094#ifdef BSLMF_INVOKERESULT_SUPPORT_CPP17_SEMANTICS
1106template <
class t_VOID_TYPE,
class t_FN,
class... t_ARGTYPES>
1107struct InvokeResult_FunctorImp {
1117template <
class t_FN,
class... t_ARGTYPES>
1118struct InvokeResult_FunctorImp<
1119 typename
bslmf::VoidType<decltype(InvokeResult_ImpUtils::myDeclval<t_FN>()(
1120 InvokeResult_ImpUtils::myDeclval<t_ARGTYPES>()...))>::type,
1122 t_ARGTYPES...> : InvokeResult_ImpUtils {
1130 typedef decltype(myDeclval<t_FN>()(myDeclval<t_ARGTYPES>()...)) type;
1133template <
class t_VOID_TYPE,
class t_FN,
class... t_ARGTYPES>
1134struct InvokeResult_FunctorImp : InvokeResult_ImpUtils {
1149 myDeclval<t_FN>()(myDeclval<t_ARGTYPES>()...),
1150 InvokeResult_VoidChecker()))
1153 typedef typename InvokeResult_FunctorDeduction<k_IS_VOID,
1155 t_ARGTYPES...>::type type;
1166#ifdef BSLMF_INVOKERESULT_SUPPORT_CPP17_SEMANTICS
1177template <
class t_VOID_TYPE,
class t_FN,
class... t_ARGTYPES>
1178struct InvokeResult_FuncPtrImp {
1187template <
class t_FN,
class... t_ARGTYPES>
1188struct InvokeResult_FuncPtrImp<
1189 typename
bslmf::VoidType<decltype(InvokeResult_ImpUtils::myDeclval<t_FN>()(
1190 InvokeResult_ImpUtils::myDeclval<t_ARGTYPES>()...))>::type,
1192 t_ARGTYPES...> : InvokeResult_ImpUtils {
1202 typedef decltype(myDeclval<t_FN>()(myDeclval<t_ARGTYPES>()...)) type;
1205template <
class t_VOID_TYPE,
class t_FN,
class... t_ARGTYPES>
1206struct InvokeResult_FuncPtrImp {
1228#ifdef BSLMF_INVOKERESULT_SUPPORT_CPP17_SEMANTICS
1230template <
class t_VOID_TYPE,
1231 bool t_ARG1_DERIVES_FROM_CLASS,
1232 bool t_ARG1_IS_REFERENCE_WRAPPER,
1235 class... t_ARGTYPES>
1236struct InvokeResult_MemFuncPtrImpDispatch;
1245template <
class t_FN>
1246struct InvokeResult_MemFuncPtrImp<t_FN> {
1253template <
class t_FN,
class t_ARG1TYPE,
class... t_ARGTYPES>
1254struct InvokeResult_MemFuncPtrImp<t_FN, t_ARG1TYPE, t_ARGTYPES...>
1255: InvokeResult_MemFuncPtrImpDispatch<
1258 typename MemberFunctionPointerTraits<t_FN>::ClassType,
1259 typename bsl::remove_reference<t_ARG1TYPE>::type>::value,
1260 IsReferenceWrapper<typename bsl::remove_const<
1261 typename bsl::remove_reference<t_ARG1TYPE>::type>::type>::value,
1267template <
class t_FN,
class... t_ARGTYPES>
1268struct InvokeResult_MemFuncPtrImp<t_FN, t_ARGTYPES...> {
1273 typedef typename MemberFunctionPointerTraits<t_FN>::ResultType QType;
1289#ifdef BSLMF_INVOKERESULT_SUPPORT_CPP17_SEMANTICS
1300template <
class t_VOID_TYPE,
1301 bool t_ARG1_DERIVES_FROM_CLASS,
1302 bool t_ARG1_IS_REFERENCE_WRAPPER,
1305 class... t_ARGTYPES>
1306struct InvokeResult_MemFuncPtrImpDispatch {
1318template <
class t_FN,
class t_ARG1TYPE,
class... t_ARGTYPES>
1319struct InvokeResult_MemFuncPtrImpDispatch<
1320 typename
bslmf::VoidType<
1321 decltype(((*InvokeResult_ImpUtils::myDeclval<t_ARG1TYPE>()).*
1322 InvokeResult_ImpUtils::myDeclval<t_FN>())(
1323 InvokeResult_ImpUtils::myDeclval<t_ARGTYPES>()...))>::type,
1328 t_ARGTYPES...> : InvokeResult_ImpUtils {
1337 typedef decltype(((*myDeclval<t_ARG1TYPE>()).*
1338 myDeclval<t_FN>())(myDeclval<t_ARGTYPES>()...)) type;
1350template <
class t_FN,
class t_ARG1TYPE,
class... t_ARGTYPES>
1351struct InvokeResult_MemFuncPtrImpDispatch<
1352 typename
bslmf::VoidType<
1353 decltype((InvokeResult_ImpUtils::myDeclval<t_ARG1TYPE>().*
1354 InvokeResult_ImpUtils::myDeclval<t_FN>())(
1355 InvokeResult_ImpUtils::myDeclval<t_ARGTYPES>()...))>::type,
1360 t_ARGTYPES...> : InvokeResult_ImpUtils {
1369 typedef decltype((myDeclval<t_ARG1TYPE>().*
1370 myDeclval<t_FN>())(myDeclval<t_ARGTYPES>()...)) type;
1381template <
class t_FN,
class t_ARG1TYPE,
class... t_ARGTYPES>
1382struct InvokeResult_MemFuncPtrImpDispatch<
1383 typename
bslmf::VoidType<
1384 decltype((InvokeResult_ImpUtils::myDeclval<t_ARG1TYPE>().get().*
1385 InvokeResult_ImpUtils::myDeclval<t_FN>())(
1386 InvokeResult_ImpUtils::myDeclval<t_ARGTYPES>()...))>::type,
1391 t_ARGTYPES...> : InvokeResult_ImpUtils {
1400 typedef decltype((myDeclval<t_ARG1TYPE>().get().*
1401 myDeclval<t_FN>())(myDeclval<t_ARGTYPES>()...)) type;
1410#ifdef BSLMF_INVOKERESULT_SUPPORT_CPP17_SEMANTICS
1412template <
class t_VOID_TYPE,
1413 bool t_ARG_DERIVES_FROM_CLASS,
1414 bool t_ARG_IS_REFERENCE_WRAPPER,
1417struct InvokeResult_MemObjPtrImpDispatch;
1429template <
class t_FN,
class... t_ARGTYPES>
1430struct InvokeResult_MemObjPtrImp {
1437template <
class t_FN,
class t_ARGTYPE>
1438struct InvokeResult_MemObjPtrImp<t_FN, t_ARGTYPE>
1439: InvokeResult_MemObjPtrImpDispatch<
1442 typename MemberPointerTraits<t_FN>::ClassType,
1443 typename bsl::remove_reference<t_ARGTYPE>::type>::value,
1444 IsReferenceWrapper<typename bsl::remove_const<
1445 typename bsl::remove_reference<t_ARGTYPE>::type>::type>::value,
1452template <
class t_FN,
class... t_ARGTYPES>
1453struct InvokeResult_MemObjPtrImp {
1456template <
class t_CLASS,
class t_RET,
class t_ARGTYPE>
1457struct InvokeResult_MemObjPtrImp<t_RET t_CLASS::*, t_ARGTYPE> {
1463 typedef InvokeResult_MemPtrArgQualifiers<t_CLASS, t_ARGTYPE> ArgQualifiers;
1467 typedef typename InvokeResult_AddCVRef<t_RET,
1468 ArgQualifiers::k_IS_CONST,
1469 ArgQualifiers::k_IS_VOLATILE,
1470 ArgQualifiers::k_IS_LVALUE>::type
1476#ifdef BSLS_COMPILERFEATURES_SUPPORT_RVALUE_REFERENCES
1478 ArgQualifiers::k_IS_LVALUE,
1480 typename bsl::add_rvalue_reference<cvtype>::type>::type type;
1484 typedef cvtype type;
1494#ifdef BSLMF_INVOKERESULT_SUPPORT_CPP17_SEMANTICS
1504template <
class t_VOID_TYPE,
1505 bool t_ARG_DERIVES_FROM_CLASS,
1506 bool t_ARG_IS_REFERENCE_WRAPPER,
1509struct InvokeResult_MemObjPtrImpDispatch {
1520template <
class t_FN,
class t_ARGTYPE>
1521struct InvokeResult_MemObjPtrImpDispatch<
1522 typename
bslmf::VoidType<
1523 decltype((*InvokeResult_ImpUtils::myDeclval<t_ARGTYPE>()).*
1524 InvokeResult_ImpUtils::myDeclval<t_FN>())>::type,
1528 t_ARGTYPE> : InvokeResult_ImpUtils {
1531 typedef decltype((*myDeclval<t_ARGTYPE>()).*myDeclval<t_FN>()) type;
1545template <
class t_FN,
class t_ARGTYPE>
1546struct InvokeResult_MemObjPtrImpDispatch<
1547 typename
bslmf::VoidType<
1548 decltype(InvokeResult_ImpUtils::myDeclval<t_ARGTYPE>().*
1549 InvokeResult_ImpUtils::myDeclval<t_FN>())>::type,
1553 t_ARGTYPE> : InvokeResult_ImpUtils {
1556 typedef decltype(myDeclval<t_ARGTYPE>().*myDeclval<t_FN>()) type;
1570template <
class t_FN,
class t_ARGTYPE>
1571struct InvokeResult_MemObjPtrImpDispatch<
1572 typename
bslmf::VoidType<
1573 decltype(InvokeResult_ImpUtils::myDeclval<t_ARGTYPE>().get().*
1574 InvokeResult_ImpUtils::myDeclval<t_FN>())>::type,
1578 t_ARGTYPE> : InvokeResult_ImpUtils {
1581 typedef decltype(myDeclval<t_ARGTYPE>().get().*myDeclval<t_FN>()) type;
decay_imp< U, k_ISARRAY, k_ISFUNC >::type type
Definition bslmf_decay.h:167
Definition bslmf_invokeresult.h:362
#define BSLMF_TAG_TO_INT(BSLMF_EXPR)
Definition bslmf_tag.h:179
#define BSLS_IDENT(str)
BSLS_IDENT() - insert string into .comment binary segment (if supported)
Definition bsls_ident.h:238
Definition bdlat_valuetypefunctions.h:939
BloombergLP::bsls::Nullptr_Impl::Type nullptr_t
Definition bsls_nullptr.h:283
Definition bdlbb_blob.h:579
BloombergLP::bslmf::AddConst_Imp< t_TYPE,!is_reference< t_TYPE >::value &&!is_function< t_TYPE >::value &&!is_const< t_TYPE >::value >::Type type
Definition bslmf_addconst.h:176
t_TYPE & type
This typedef defines the return type of this meta function.
Definition bslmf_addlvaluereference.h:131
BloombergLP::bslmf::AddPointer_Impl< t_TYPE >::type type
Definition bslmf_addpointer.h:181
BloombergLP::bslmf::AddVolatile_Imp< t_TYPE,!is_reference< t_TYPE >::value &&!is_function< t_TYPE >::value &&!is_volatile< t_TYPE >::value >::Type type
Definition bslmf_addvolatile.h:178
Definition bslmf_conditional.h:123
Definition bslmf_enableif.h:530
Definition bslmf_integralconstant.h:261
Definition bslmf_isclass.h:164
Definition bslmf_isconst.h:145
Definition bslmf_isconvertible.h:875
Definition bslmf_islvaluereference.h:135
Definition bslmf_ismemberobjectpointer.h:141
Definition bslmf_isreference.h:137
Definition bslmf_isrvaluereference.h:126
Definition bslmf_isvolatile.h:145
remove_const< typenameremove_volatile< t_TYPE >::type >::type type
Definition bslmf_removecv.h:128
t_TYPE type
This typedef is an alias to the (template parameter) t_TYPE.
Definition bslmf_removereference.h:156
Definition bslmf_functionpointertraits.h:147
Definition bslmf_invokeresult.h:312
InvokeResultDeductionFailed(const t_TYPE &)
Definition bslmf_invokeresult.h:319
Forward declaration.
Definition bslmf_invokeresult.h:419
BloombergLP::bslmf::InvokeResult_Imp< k_IS_FUNCPTR, k_IS_MEMFUNCPTR, k_IS_MEMOBJPTR, FwdFn, t_ARGTYPES... > BaseType
Definition bslmf_invokeresult.h:460
Definition bslmf_invokeresult.h:685
AnyLvalue(volatile t_TP &)
(Declared but not defined) Convert from any lvalue argument.
Definition bslmf_invokeresult.h:698
t_FALLBACK type
Definition bslmf_resulttype.h:262
Definition bslmf_tag.h:166