8#ifndef INCLUDED_BSLMF_MOVABLEREF
9#define INCLUDED_BSLMF_MOVABLEREF
651#include <bslscm_version.h>
670#if defined(BSLS_COMPILERFEATURES_SUPPORT_RVALUE_REFERENCES) && \
671 defined(BSLS_COMPILERFEATURES_SUPPORT_ALIAS_TEMPLATES)
672#define BSLMF_MOVABLEREF_USES_RVALUE_REFERENCES
680#if defined(BSLMF_MOVABLEREF_USES_RVALUE_REFERENCES)
688# define BSLMF_MOVABLEREF_DEDUCE(...) \
689 ::BloombergLP::bslmf::MovableRef_Deduced<__VA_ARGS__>
691# define BSLMF_MOVABLEREF_DEDUCE(...) \
692 ::BloombergLP::bslmf::MovableRef<__VA_ARGS__>
698struct MovableRefUtil;
702template <
class t_TYPE>
703struct MovableRefUtil_AddLvalueReference;
706template <
class t_TYPE>
707struct MovableRefUtil_AddMovableReference;
710template <
class t_TYPE>
711struct MovableRefUtil_Decay;
714template <
class t_TYPE>
715struct MovableRefUtil_PropertyTraits;
718template <
class t_TYPE>
719struct MovableRefUtil_RemoveReference;
721#ifdef BSLMF_MOVABLEREF_USES_RVALUE_REFERENCES
724template <
class t_TYPE>
725struct MovableRef_Helper;
733#ifdef BSLMF_MOVABLEREF_USES_RVALUE_REFERENCES
737template <
class t_TYPE>
738using MovableRef =
typename MovableRef_Helper<t_TYPE>::type;
751template <
class t_TYPE>
779 operator t_TYPE&()
const;
803 template <
class t_TYPE>
811 template <
class t_TYPE>
820 template <
class t_TYPE>
828 template <
class t_TYPE>
838 template <
class t_TYPE>
848 template <
class t_TYPE>
866 template <
class t_TYPE>
871#ifdef BSLMF_MOVABLEREF_USES_RVALUE_REFERENCES
872 template <
class t_TYPE>
876 template <
class t_TYPE>
878 template <
class t_TYPE>
891#ifdef BSLMF_MOVABLEREF_USES_RVALUE_REFERENCES
892 template <
class t_TYPE>
897 template <
class t_TYPE>
899 template <
class t_TYPE>
914 template <
class t_TYPE>
936 template <
class t_TYPE>
947#ifdef BSLMF_MOVABLEREF_USES_RVALUE_REFERENCES
956#ifdef BSLMF_MOVABLEREF_USES_RVALUE_REFERENCES
967template <
class t_TYPE>
968struct MovableRef_Helper {
975 using type = t_TYPE&&;
984template <
class t_TYPE,
987using MovableRef_Deduced = t_TYPE&&;
999#ifndef BSLMF_MOVABLEREF_USES_RVALUE_REFERENCES
1002template <
class t_TYPE>
1004MovableRef<t_TYPE>::MovableRef(t_TYPE *pointer)
1011template <
class t_TYPE>
1024#ifdef BSLMF_MOVABLEREF_USES_RVALUE_REFERENCES
1027template <
class t_TYPE>
1037template <
class t_TYPE>
1044template <
class t_TYPE>
1053#ifdef BSLMF_MOVABLEREF_USES_RVALUE_REFERENCES
1055template <
class t_TYPE>
1065template <
class t_TYPE>
1072template <
class t_TYPE>
1086#ifdef BSLMF_MOVABLEREF_USES_RVALUE_REFERENCES
1092template <
class t_TYPE>
1107template <
class t_TYPE>
1117template <
class t_TYPE>
1128template <
class t_TYPE>
1136template <
class t_TYPE>
1141template <
class t_TYPE>
1146template <
class t_TYPE>
1151template <
class t_TYPE>
1155template <
class t_TYPE>
1159template <
class t_TYPE>
1163template <
class t_TYPE>
1173#ifdef BSLMF_MOVABLEREF_USES_RVALUE_REFERENCES
1179template <
class t_TYPE>
1185template <
class t_TYPE>
1191template <
class t_TYPE>
1197template <
class t_TYPE>
1203template <
class t_TYPE>
1209template <
class t_TYPE>
1215template <
class t_TYPE>
1221template <
class t_TYPE>
1225template <
class t_TYPE>
1229template <
class t_TYPE>
1233template <
class t_TYPE>
1243#ifdef BSLMF_MOVABLEREF_USES_RVALUE_REFERENCES
1251template <
class t_TYPE>
1281template <
class t_TYPE>
1287template <
class t_TYPE>
1293template <
class t_TYPE>
1299template <
class t_TYPE>
1305template <
class t_TYPE>
1311template <
class t_TYPE>
1317template <
class t_TYPE>
1321template <
class t_TYPE>
1325template <
class t_TYPE>
1329template <
class t_TYPE>
1339#ifdef BSLMF_MOVABLEREF_USES_RVALUE_REFERENCES
1348template <
class t_TYPE>
1378template <
class t_TYPE>
1384template <
class t_TYPE>
1390template <
class t_TYPE>
1396template <
class t_TYPE>
1402template <
class t_TYPE>
1408template <
class t_TYPE>
1414template <
class t_TYPE>
1418template <
class t_TYPE>
1422template <
class t_TYPE>
1426template <
class t_TYPE>
1436#ifdef BSLMF_MOVABLEREF_USES_RVALUE_REFERENCES
1451template <
class t_TYPE>
1461template <
class t_TYPE>
1463:
bsl::decay<typename MovableRefUtil_RemoveReference<t_TYPE>::type> {
Definition bslmf_decay.h:158
Definition bslmf_movableref.h:752
#define BSLS_ASSERT(X)
Definition bsls_assert.h:1976
#define BSLS_IDENT(str)
BSLS_IDENT() - insert string into .comment binary segment (if supported)
Definition bsls_ident.h:238
#define BSLS_KEYWORD_CONSTEXPR
Definition bsls_keyword.h:624
#define BSLS_KEYWORD_NOEXCEPT
Definition bsls_keyword.h:674
Definition bdlbb_blob.h:579
Definition bslmf_addlvaluereference.h:128
Definition bslmf_enableif.h:530
Definition bslmf_integralconstant.h:261
Definition bslmf_iscopyconstructible.h:242
Definition bslmf_islvaluereference.h:135
Definition bslmf_isnothrowmoveconstructible.h:361
Definition bslmf_isreference.h:137
Definition bslmf_isrvaluereference.h:126
Definition bslmf_removereference.h:153
t_TYPE type
This typedef is an alias to the (template parameter) t_TYPE.
Definition bslmf_removereference.h:156
Definition bslmf_movableref.h:839
Definition bslmf_movableref.h:849
Definition bslmf_movableref.h:867
Definition bslmf_movableref.h:805
Definition bslmf_movableref.h:813
Definition bslmf_movableref.h:821
Definition bslmf_movableref.h:829
t_TYPE & type
Definition bslmf_movableref.h:1296
t_TYPE & type
Definition bslmf_movableref.h:1302
t_TYPE & type
Definition bslmf_movableref.h:1308
t_TYPE & type
Definition bslmf_movableref.h:1314
const void type
Definition bslmf_movableref.h:1266
const volatile void type
Definition bslmf_movableref.h:1278
t_TYPE & type
Definition bslmf_movableref.h:1290
void type
Definition bslmf_movableref.h:1260
volatile void type
Definition bslmf_movableref.h:1272
forward declaration
Definition bslmf_movableref.h:1282
t_TYPE & type
Definition bslmf_movableref.h:1284
bslmf::MovableRef< t_TYPE > type
Definition bslmf_movableref.h:1393
bslmf::MovableRef< t_TYPE > type
Definition bslmf_movableref.h:1399
bslmf::MovableRef< t_TYPE > type
Definition bslmf_movableref.h:1405
bslmf::MovableRef< t_TYPE > type
Definition bslmf_movableref.h:1411
const void type
Definition bslmf_movableref.h:1363
const volatile void type
Definition bslmf_movableref.h:1375
t_TYPE & type
Definition bslmf_movableref.h:1387
void type
Definition bslmf_movableref.h:1357
volatile void type
Definition bslmf_movableref.h:1369
forward declaration
Definition bslmf_movableref.h:1379
bslmf::MovableRef< t_TYPE > type
Definition bslmf_movableref.h:1381
forward declaration
Definition bslmf_movableref.h:1463
bsl::true_type IsReference
Definition bslmf_movableref.h:1133
bsl::true_type IsMovableReference
Definition bslmf_movableref.h:1132
bsl::false_type IsLvalueReference
Definition bslmf_movableref.h:1131
bsl::false_type IsMovableReference
Definition bslmf_movableref.h:1121
bsl::true_type IsReference
Definition bslmf_movableref.h:1122
bsl::true_type IsLvalueReference
Definition bslmf_movableref.h:1120
forward declaration
Definition bslmf_movableref.h:1108
bsl::false_type IsLvalueReference
Definition bslmf_movableref.h:1110
bsl::false_type IsReference
Definition bslmf_movableref.h:1112
bsl::false_type IsMovableReference
Definition bslmf_movableref.h:1111
t_TYPE type
Definition bslmf_movableref.h:1200
t_TYPE type
Definition bslmf_movableref.h:1206
t_TYPE type
Definition bslmf_movableref.h:1212
t_TYPE type
Definition bslmf_movableref.h:1218
t_TYPE type
Definition bslmf_movableref.h:1194
forward declaration
Definition bslmf_movableref.h:1186
t_TYPE type
Definition bslmf_movableref.h:1188
Definition bslmf_movableref.h:795
static MovableRef< t_TYPE > move(t_TYPE &reference) BSLS_KEYWORD_NOEXCEPT
Definition bslmf_movableref.h:1067
static bsl::enable_if<!bsl::is_copy_constructible< t_TYPE >::value||bsl::is_nothrow_move_constructible< t_TYPE >::value, MovableRef< t_TYPE > >::type move_if_noexcept(t_TYPE &lvalue) BSLS_KEYWORD_NOEXCEPT
Definition bslmf_movableref.h:941
static t_TYPE & access(t_TYPE &ref) BSLS_KEYWORD_NOEXCEPT
Definition bslmf_movableref.h:1039
static bsl::enable_if<!bsl::is_nothrow_move_constructible< t_TYPE >::value &&bsl::is_copy_constructible< t_TYPE >::value, constt_TYPE & >::type move_if_noexcept(t_TYPE &lvalue) BSLS_KEYWORD_NOEXCEPT
Definition bslmf_movableref.h:919
static TYPE * addressOf(TYPE &obj)
Definition bsls_util.h:312