8#ifndef INCLUDED_BSLMF_INVOKERESULT
9#define INCLUDED_BSLMF_INVOKERESULT
242#include <bslscm_version.h>
274#if BSLS_COMPILERFEATURES_SIMULATE_CPP11_FEATURES
278# define COMPILING_BSLMF_INVOKERESULT_H
280# undef COMPILING_BSLMF_INVOKERESULT_H
283#if defined(BSLS_COMPILERFEATURES_SUPPORT_DECLTYPE) \
284 && !(defined(BSLS_PLATFORM_CMP_MSVC) && BSLS_PLATFORM_CMP_VERSION == 1800)
289#define BSLMF_INVOKERESULT_SUPPORT_CPP17_SEMANTICS 1
314 template <
class t_TYPE>
320#if !BSLS_COMPILERFEATURES_SIMULATE_CPP11_FEATURES
323template <
class t_FN,
class... t_ARGTYPES>
324struct InvokeResult_BaseCalcUtil;
337#if !BSLS_COMPILERFEATURES_SIMULATE_CPP11_FEATURES
355template <
class t_FN,
class... t_ARGTYPES>
357:
public BloombergLP::bslmf::InvokeResult_BaseCalcUtil<t_FN, t_ARGTYPES...>::
368#ifdef BSLS_COMPILERFEATURES_SUPPORT_ALIAS_TEMPLATES
376template <
class t_FN,
class... t_ARGTYPES>
377using invoke_result_t =
typename invoke_result<t_FN, t_ARGTYPES...>::type;
391#if !BSLS_COMPILERFEATURES_SIMULATE_CPP11_FEATURES
394template <
bool t_IS_FUNCPTR,
395 bool t_IS_MEMFUNCPTR,
399struct InvokeResult_Imp;
412template <
class t_FN,
class... t_ARGTYPES>
424 k_IS_FUNCPTR = BloombergLP::bslmf::IsFunctionPointer<F>::value,
425 k_IS_MEMFUNCPTR= BloombergLP::bslmf::IsMemberFunctionPointer<F>::value,
448 typedef typename BloombergLP::bslmf::InvokeResult_Imp<k_IS_FUNCPTR,
464struct InvokeResult_VoidChecker :
Tag<true> {
482template <
class t_TYPE>
484operator,(
const t_TYPE&, InvokeResult_VoidChecker);
487struct InvokeResult_Index {
518 e_CONST_VOLATILE_VOIDPTR,
530#ifdef BSLS_COMPILERFEATURES_SUPPORT_UTF8_CHAR_TYPE
534#ifdef BSLS_COMPILERFEATURES_SUPPORT_UNICODE_CHAR_TYPES
558 template <
class t_TP>
560 template <
class t_TP>
568template <
int t_INDEX>
struct InvokeResult_Type;
577struct InvokeResult_Type<InvokeResult_Index::e_VOID>
578 {
typedef void type; };
580struct InvokeResult_Type<InvokeResult_Index::e_BOOL>
581 {
typedef bool type; };
583struct InvokeResult_Type<InvokeResult_Index::e_CHAR>
584 {
typedef char type; };
586struct InvokeResult_Type<InvokeResult_Index::e_SCHAR>
587 {
typedef signed char type; };
589struct InvokeResult_Type<InvokeResult_Index::e_UCHAR>
590 {
typedef unsigned char type; };
591#ifdef BSLS_COMPILERFEATURES_SUPPORT_UTF8_CHAR_TYPE
593struct InvokeResult_Type<InvokeResult_Index::e_CHAR8_T>
594 {
typedef char8_t type; };
597struct InvokeResult_Type<InvokeResult_Index::e_WCHAR_T>
598 {
typedef wchar_t type; };
599#ifdef BSLS_COMPILERFEATURES_SUPPORT_UNICODE_CHAR_TYPES
601struct InvokeResult_Type<InvokeResult_Index::e_CHAR16_T>
602 {
typedef char16_t type; };
604struct InvokeResult_Type<InvokeResult_Index::e_CHAR32_T>
605 {
typedef char32_t type; };
608struct InvokeResult_Type<InvokeResult_Index::e_SHORT>
609 {
typedef short type; };
611struct InvokeResult_Type<InvokeResult_Index::e_USHORT>
612 {
typedef unsigned short type; };
614struct InvokeResult_Type<InvokeResult_Index::e_INT>
615 {
typedef int type; };
617struct InvokeResult_Type<InvokeResult_Index::e_UNSIGNED>
618 {
typedef unsigned type; };
620struct InvokeResult_Type<InvokeResult_Index::e_LONG>
621 {
typedef long type; };
623struct InvokeResult_Type<InvokeResult_Index::e_ULONG>
624 {
typedef unsigned long type; };
626struct InvokeResult_Type<InvokeResult_Index::e_LONG_LONG>
627 {
typedef long long type; };
629struct InvokeResult_Type<InvokeResult_Index::e_ULONG_LONG>
630 {
typedef unsigned long long type; };
632struct InvokeResult_Type<InvokeResult_Index::e_FLOAT>
633 {
typedef float type; };
635struct InvokeResult_Type<InvokeResult_Index::e_DOUBLE>
636 {
typedef double type; };
638struct InvokeResult_Type<InvokeResult_Index::e_LONG_DOUBLE>
639 {
typedef long double type; };
641struct InvokeResult_Type<InvokeResult_Index::e_VOIDPTR>
642 {
typedef void *type; };
644struct InvokeResult_Type<InvokeResult_Index::e_CONST_VOIDPTR>
645 {
typedef const void *type; };
647struct InvokeResult_Type<InvokeResult_Index::e_VOLATILE_VOIDPTR>
648 {
typedef volatile void *type; };
650struct InvokeResult_Type<InvokeResult_Index::e_CONST_VOLATILE_VOIDPTR>
651 {
typedef const volatile void *type; };
653struct InvokeResult_Type<InvokeResult_Index::e_NULLPTR_T>
656struct InvokeResult_Type<InvokeResult_Index::e_POINTER>
657 {
typedef void *type; };
659struct InvokeResult_Type<InvokeResult_Index::e_OTHER>
660 {
typedef InvokeResultDeductionFailed type; };
666struct InvokeResult_ImpUtils
678 template <
class t_TP>
687#ifdef BSLS_COMPILERFEATURES_SUPPORT_RVALUE_REFERENCES
689 template <
class t_TP>
695 template <
class t_TP>
704#ifdef BSLS_COMPILERFEATURES_SUPPORT_RVALUE_REFERENCES
711 template <
class t_SOME_TYPE>
712 static typename bsl::add_rvalue_reference<t_SOME_TYPE>::type myDeclval();
714 template <
class t_SOME_TYPE>
715 static t_SOME_TYPE myDeclval();
733 template <
class t_TP>
735 template <
class t_TP>
743 template <
class t_TP>
745 template <
class t_TP>
747 template <
class t_TP>
749 template <
class t_TP>
754 template <
class t_TP>
755 static t_TP& uncv(
const t_TP&);
756 template <
class t_TP>
757 static t_TP& uncv(
const volatile t_TP&);
763 template <
class t_TP>
764 static t_TP& unpoint(t_TP&);
765 template <
class t_TP>
766 static const t_TP& unpoint(
const t_TP&);
767 template <
class t_TP>
770 template <
class t_TP>
772 unpoint(t_TP *
const&);
773 template <
class t_TP>
775 unpoint(t_TP *
volatile&);
776 template <
class t_TP>
778 unpoint(t_TP *
const volatile&);
792template <
class t_UNQUAL_TYPE,
796struct InvokeResult_AddCVRef {
803 t_UNQUAL_TYPE>::type CQualType;
808 CQualType>::type CVQualType;
815 CVQualType>::type type;
818#if !BSLS_COMPILERFEATURES_SIMULATE_CPP11_FEATURES
820#ifndef BSLMF_INVOKERESULT_SUPPORT_CPP17_SEMANTICS
821template <
bool ,
class t_FN,
class... t_ARGTYPES>
822struct InvokeResult_FunctorDeduction : InvokeResult_ImpUtils {
839 uncv(myDeclval<t_FN>()(myDeclval<t_ARGTYPES>()...)))),
840 k_IS_POINTER = (k_INDEX == InvokeResult_Index::e_POINTER),
842 checkLvalue(myDeclval<t_FN>()(myDeclval<t_ARGTYPES>()...), 0)),
843 k_IS_CONST_PTR = k_IS_POINTER &&
845 myDeclval<t_FN>()(myDeclval<t_ARGTYPES>()...))),
846 k_IS_VOLATILE_PTR = k_IS_POINTER &&
848 myDeclval<t_ARGTYPES>()...))),
850 uncv(unpoint(myDeclval<t_FN>()(myDeclval<t_ARGTYPES>()...))))),
852 unpoint(myDeclval<t_FN>()(myDeclval<t_ARGTYPES>()...)))),
854 unpoint(myDeclval<t_FN>()(myDeclval<t_ARGTYPES>()...)))),
855 k_CANT_DEDUCE_TYPE = (k_TARGET_INDEX ==
856 (
int)InvokeResult_Index::e_OTHER)
860 ! k_CANT_DEDUCE_TYPE,
861 typename InvokeResult_Type<k_TARGET_INDEX>::type,
863 >::type UnqualTargetType;
872 InvokeResult_AddCVRef<UnqualTargetType,
873 static_cast<bool>(k_IS_CONST_TARGET)
874 && !
static_cast<bool>(k_CANT_DEDUCE_TYPE),
875 static_cast<bool>(k_IS_VOLATILE_TARGET)
876 && !
static_cast<bool>(k_CANT_DEDUCE_TYPE),
877 false>::type CVQualTargetType;
885 && !
static_cast<bool>(k_CANT_DEDUCE_TYPE),
887 CVQualTargetType>::type UnqualType;
892 InvokeResult_AddCVRef<
894 static_cast<bool>(k_IS_CONST_PTR)
895 && !
static_cast<bool>(k_CANT_DEDUCE_TYPE),
896 static_cast<bool>(k_IS_VOLATILE_PTR)
897 && !
static_cast<bool>(k_CANT_DEDUCE_TYPE),
898 static_cast<bool>(k_IS_LVALUE)
899 && !
static_cast<bool>(k_CANT_DEDUCE_TYPE)>::type Qtype;
910template <
class t_FN,
class... t_ARGTYPES>
911struct InvokeResult_FunctorDeduction<true , t_FN, t_ARGTYPES...> {
930template <
class t_MEMOF_CLASS,
935struct InvokeResult_MemPtrArgQualifiers {
941 typename bsl::remove_reference<t_ARG_TYPE>::type>::value,
943 typename bsl::remove_reference<t_ARG_TYPE>::type>::value
958template <
class t_MEMOF_CLASS,
class t_ARG_TYPE>
959struct InvokeResult_MemPtrArgQualifiers<t_MEMOF_CLASS, t_ARG_TYPE, false>
960: InvokeResult_ImpUtils {
962#ifdef BSLS_COMPILERFEATURES_SUPPORT_RVALUE_REFERENCES
974 template <
class t_TP>
975 static t_TP& tolvalue(t_TP&&);
984 checkVolatile(tolvalue(*myDeclval<t_ARG_TYPE>())))};
992 k_IS_CONST = k_IS_LVALUE &&
995 *myDeclval<t_ARG_TYPE>()))
1000#if !BSLS_COMPILERFEATURES_SIMULATE_CPP11_FEATURES
1003template <
class t_VOID_TYPE,
class t_FN,
class... t_ARGTYPES>
1004struct InvokeResult_FunctorImp;
1007template <
class t_VOID_TYPE,
class t_FN,
class... t_ARGTYPES>
1008struct InvokeResult_FuncPtrImp;
1011template <
class t_FN,
class... t_ARGTYPES>
1012struct InvokeResult_MemFuncPtrImp;
1015template <
class t_FN,
class... t_ARGTYPES>
1016struct InvokeResult_MemObjPtrImp;
1026template <
bool t_IS_FUNCPTR,
1027 bool t_IS_MEMFUNCPTR,
1028 bool t_IS_MEMOBJPTR,
1030 class... t_ARGTYPES>
1031struct InvokeResult_Imp : InvokeResult_FunctorImp<void, t_FN, t_ARGTYPES...> {
1037template <
class t_FN,
class... t_ARGTYPES>
1038struct InvokeResult_Imp<true ,
1043: InvokeResult_FuncPtrImp<void, t_FN, t_ARGTYPES...> {
1049template <
class t_FN,
class... t_ARGTYPES>
1050struct InvokeResult_Imp<false,
1055: InvokeResult_MemFuncPtrImp<t_FN, t_ARGTYPES...> {
1061template <
class t_FN,
class... t_ARGTYPES>
1062struct InvokeResult_Imp<false,
1067: InvokeResult_MemObjPtrImp<t_FN, t_ARGTYPES...> {
1074#ifdef BSLMF_INVOKERESULT_SUPPORT_CPP17_SEMANTICS
1083template <
class t_VOID_TYPE,
class t_FN,
class... t_ARGTYPES>
1084struct InvokeResult_FunctorImp {
1094template <
class t_FN,
class... t_ARGTYPES>
1095struct InvokeResult_FunctorImp<
1096 typename
bslmf::VoidType<decltype(InvokeResult_ImpUtils::myDeclval<t_FN>()(
1097 InvokeResult_ImpUtils::myDeclval<t_ARGTYPES>()...))>::type,
1099 t_ARGTYPES...> : InvokeResult_ImpUtils {
1107 typedef decltype(myDeclval<t_FN>()(myDeclval<t_ARGTYPES>()...)) type;
1110template <
class t_VOID_TYPE,
class t_FN,
class... t_ARGTYPES>
1111struct InvokeResult_FunctorImp : InvokeResult_ImpUtils {
1126 myDeclval<t_FN>()(myDeclval<t_ARGTYPES>()...),
1127 InvokeResult_VoidChecker()))
1130 typedef typename InvokeResult_FunctorDeduction<k_IS_VOID,
1132 t_ARGTYPES...>::type type;
1143#ifdef BSLMF_INVOKERESULT_SUPPORT_CPP17_SEMANTICS
1151template <
class t_VOID_TYPE,
class t_FN,
class... t_ARGTYPES>
1152struct InvokeResult_FuncPtrImp {
1161template <
class t_FN,
class... t_ARGTYPES>
1162struct InvokeResult_FuncPtrImp<
1163 typename
bslmf::VoidType<decltype(InvokeResult_ImpUtils::myDeclval<t_FN>()(
1164 InvokeResult_ImpUtils::myDeclval<t_ARGTYPES>()...))>::type,
1166 t_ARGTYPES...> : InvokeResult_ImpUtils {
1174 typedef decltype(myDeclval<t_FN>()(myDeclval<t_ARGTYPES>()...)) type;
1177template <
class t_VOID_TYPE,
class t_FN,
class... t_ARGTYPES>
1178struct InvokeResult_FuncPtrImp {
1200#ifdef BSLMF_INVOKERESULT_SUPPORT_CPP17_SEMANTICS
1202template <
class t_VOID_TYPE,
1203 bool t_ARG1_DERIVES_FROM_CLASS,
1204 bool t_ARG1_IS_REFERENCE_WRAPPER,
1207 class... t_ARGTYPES>
1208struct InvokeResult_MemFuncPtrImpDispatch;
1216template <
class t_FN>
1217struct InvokeResult_MemFuncPtrImp<t_FN> {
1224template <
class t_FN,
class t_ARG1TYPE,
class... t_ARGTYPES>
1225struct InvokeResult_MemFuncPtrImp<t_FN, t_ARG1TYPE, t_ARGTYPES...>
1226: InvokeResult_MemFuncPtrImpDispatch<
1229 typename MemberFunctionPointerTraits<t_FN>::ClassType,
1230 typename bsl::remove_reference<t_ARG1TYPE>::type>::value,
1231 IsReferenceWrapper<typename bsl::remove_const<
1232 typename bsl::remove_reference<t_ARG1TYPE>::type>::type>::value,
1238template <
class t_FN,
class... t_ARGTYPES>
1239struct InvokeResult_MemFuncPtrImp<t_FN, t_ARGTYPES...> {
1244 typedef typename MemberFunctionPointerTraits<t_FN>::ResultType QType;
1260#ifdef BSLMF_INVOKERESULT_SUPPORT_CPP17_SEMANTICS
1268template <
class t_VOID_TYPE,
1269 bool t_ARG1_DERIVES_FROM_CLASS,
1270 bool t_ARG1_IS_REFERENCE_WRAPPER,
1273 class... t_ARGTYPES>
1274struct InvokeResult_MemFuncPtrImpDispatch {
1286template <
class t_FN,
class t_ARG1TYPE,
class... t_ARGTYPES>
1287struct InvokeResult_MemFuncPtrImpDispatch<
1288 typename
bslmf::VoidType<
1289 decltype(((*InvokeResult_ImpUtils::myDeclval<t_ARG1TYPE>()).*
1290 InvokeResult_ImpUtils::myDeclval<t_FN>())(
1291 InvokeResult_ImpUtils::myDeclval<t_ARGTYPES>()...))>::type,
1296 t_ARGTYPES...> : InvokeResult_ImpUtils {
1305 typedef decltype(((*myDeclval<t_ARG1TYPE>()).*
1306 myDeclval<t_FN>())(myDeclval<t_ARGTYPES>()...)) type;
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;
1349template <
class t_FN,
class t_ARG1TYPE,
class... t_ARGTYPES>
1350struct InvokeResult_MemFuncPtrImpDispatch<
1351 typename
bslmf::VoidType<
1352 decltype((InvokeResult_ImpUtils::myDeclval<t_ARG1TYPE>().get().*
1353 InvokeResult_ImpUtils::myDeclval<t_FN>())(
1354 InvokeResult_ImpUtils::myDeclval<t_ARGTYPES>()...))>::type,
1359 t_ARGTYPES...> : InvokeResult_ImpUtils {
1368 typedef decltype((myDeclval<t_ARG1TYPE>().get().*
1369 myDeclval<t_FN>())(myDeclval<t_ARGTYPES>()...)) type;
1378#ifdef BSLMF_INVOKERESULT_SUPPORT_CPP17_SEMANTICS
1380template <
class t_VOID_TYPE,
1381 bool t_ARG_DERIVES_FROM_CLASS,
1382 bool t_ARG_IS_REFERENCE_WRAPPER,
1385struct InvokeResult_MemObjPtrImpDispatch;
1394template <
class t_FN,
class... t_ARGTYPES>
1395struct InvokeResult_MemObjPtrImp {
1402template <
class t_FN,
class t_ARGTYPE>
1403struct InvokeResult_MemObjPtrImp<t_FN, t_ARGTYPE>
1404: InvokeResult_MemObjPtrImpDispatch<
1407 typename MemberPointerTraits<t_FN>::ClassType,
1408 typename bsl::remove_reference<t_ARGTYPE>::type>::value,
1409 IsReferenceWrapper<typename bsl::remove_const<
1410 typename bsl::remove_reference<t_ARGTYPE>::type>::type>::value,
1417template <
class t_FN,
class... t_ARGTYPES>
1418struct InvokeResult_MemObjPtrImp {
1421template <
class t_CLASS,
class t_RET,
class t_ARGTYPE>
1422struct InvokeResult_MemObjPtrImp<t_RET t_CLASS::*, t_ARGTYPE> {
1428 typedef InvokeResult_MemPtrArgQualifiers<t_CLASS, t_ARGTYPE> ArgQualifiers;
1432 typedef typename InvokeResult_AddCVRef<t_RET,
1433 ArgQualifiers::k_IS_CONST,
1434 ArgQualifiers::k_IS_VOLATILE,
1435 ArgQualifiers::k_IS_LVALUE>::type
1441#ifdef BSLS_COMPILERFEATURES_SUPPORT_RVALUE_REFERENCES
1443 ArgQualifiers::k_IS_LVALUE,
1445 typename bsl::add_rvalue_reference<cvtype>::type>::type type;
1449 typedef cvtype type;
1459#ifdef BSLMF_INVOKERESULT_SUPPORT_CPP17_SEMANTICS
1466template <
class t_VOID_TYPE,
1467 bool t_ARG_DERIVES_FROM_CLASS,
1468 bool t_ARG_IS_REFERENCE_WRAPPER,
1471struct InvokeResult_MemObjPtrImpDispatch {
1482template <
class t_FN,
class t_ARGTYPE>
1483struct InvokeResult_MemObjPtrImpDispatch<
1484 typename
bslmf::VoidType<
1485 decltype((*InvokeResult_ImpUtils::myDeclval<t_ARGTYPE>()).*
1486 InvokeResult_ImpUtils::myDeclval<t_FN>())>::type,
1490 t_ARGTYPE> : InvokeResult_ImpUtils {
1493 typedef decltype((*myDeclval<t_ARGTYPE>()).*myDeclval<t_FN>()) type;
1507template <
class t_FN,
class t_ARGTYPE>
1508struct InvokeResult_MemObjPtrImpDispatch<
1509 typename
bslmf::VoidType<
1510 decltype(InvokeResult_ImpUtils::myDeclval<t_ARGTYPE>().*
1511 InvokeResult_ImpUtils::myDeclval<t_FN>())>::type,
1515 t_ARGTYPE> : InvokeResult_ImpUtils {
1518 typedef decltype(myDeclval<t_ARGTYPE>().*myDeclval<t_FN>()) type;
1532template <
class t_FN,
class t_ARGTYPE>
1533struct InvokeResult_MemObjPtrImpDispatch<
1534 typename
bslmf::VoidType<
1535 decltype(InvokeResult_ImpUtils::myDeclval<t_ARGTYPE>().get().*
1536 InvokeResult_ImpUtils::myDeclval<t_FN>())>::type,
1540 t_ARGTYPE> : InvokeResult_ImpUtils {
1543 typedef decltype(myDeclval<t_ARGTYPE>().get().*myDeclval<t_FN>()) type;
decay_imp< U, k_ISARRAY, k_ISFUNC >::type type
Definition bslmf_decay.h:166
Definition bslmf_invokeresult.h:358
#define BSLMF_TAG_TO_INT(BSLMF_EXPR)
Definition bslmf_tag.h:176
#define BSLS_IDENT(str)
Definition bsls_ident.h:195
Definition bdlb_printmethods.h:283
BloombergLP::bsls::Nullptr_Impl::Type nullptr_t
Definition bsls_nullptr.h:281
Definition bdlbb_blob.h:576
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:172
t_TYPE & type
This typedef defines the return type of this meta function.
Definition bslmf_addlvaluereference.h:129
BloombergLP::bslmf::AddPointer_Impl< t_TYPE >::type type
Definition bslmf_addpointer.h:175
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:174
Definition bslmf_conditional.h:120
Definition bslmf_enableif.h:525
Definition bslmf_integralconstant.h:244
Definition bslmf_isclass.h:163
Definition bslmf_isconst.h:144
Definition bslmf_isconvertible.h:867
Definition bslmf_islvaluereference.h:125
Definition bslmf_ismemberobjectpointer.h:141
Definition bslmf_isreference.h:137
Definition bslmf_isrvaluereference.h:126
Definition bslmf_isvolatile.h:144
remove_const< typenameremove_volatile< t_TYPE >::type >::type type
Definition bslmf_removecv.h:126
Definition bslmf_functionpointertraits.h:137
Definition bslmf_invokeresult.h:308
InvokeResultDeductionFailed(const t_TYPE &)
Definition bslmf_invokeresult.h:315
Forward declaration.
Definition bslmf_invokeresult.h:413
BloombergLP::bslmf::InvokeResult_Imp< k_IS_FUNCPTR, k_IS_MEMFUNCPTR, k_IS_MEMOBJPTR, FwdFn, t_ARGTYPES... > BaseType
Definition bslmf_invokeresult.h:453
Definition bslmf_invokeresult.h:673
AnyLvalue(volatile t_TP &)
(Declared but not defined) Convert from any lvalue argument.
Definition bslmf_invokeresult.h:684
t_FALLBACK type
Definition bslmf_resulttype.h:260
Definition bslmf_tag.h:163