11#ifndef INCLUDED_BDLB_VARIANT_CPP03
12#define INCLUDED_BDLB_VARIANT_CPP03
63#ifdef COMPILING_BDLB_VARIANT_H
65#if defined(BSLS_COMPILERFEATURES_SUPPORT_VARIADIC_TEMPLATES) \
66 && defined(BSLS_COMPILERFEATURES_SUPPORT_ALIAS_TEMPLATES)
70#define BDLB_VARIANT_USING_VARIADIC_TEMPLATES
76struct Variant_CopyAssignVisitor;
77struct Variant_CopyConstructVisitor;
78struct Variant_DefaultConstructVisitor;
79struct Variant_DestructorVisitor;
80struct Variant_EqualityTestVisitor;
81struct Variant_MoveAssignVisitor;
82struct Variant_MoveConstructVisitor;
83struct Variant_PrintVisitor;
88template <
class TYPES,
class TYPE>
89struct Variant_TypeIndex;
98typedef struct {
char a[2]; } Variant_ReturnValueHelper_NoType;
101 !=
sizeof(Variant_ReturnValueHelper_NoType));
109struct Variant_ReturnValueHelper_Matcher {
119 static Variant_ReturnValueHelper_NoType
match(...);
127template <
class VISITOR>
128struct Variant_ReturnValueHelper
131 sizeof(Variant_ReturnValueHelper_Matcher::match<VISITOR>(0)) ==
132 sizeof(Variant_ReturnValueHelper_YesType)> {
145template <
class TYPES>
146class VariantImp_AllocatorBase {
217 template <
class VARIANT_TYPES>
220 template <
class VARIANT_TYPES>
221 friend bool operator==(
const VariantImp<VARIANT_TYPES>&,
222 const VariantImp<VARIANT_TYPES>&);
239 template <
class TYPE>
260template <
class TYPES>
261class VariantImp_NoAllocatorBase {
327 template <
class VARIANT_TYPES>
330 template <
class VARIANT_TYPES>
331 friend bool operator==(
const VariantImp<VARIANT_TYPES>&,
332 const VariantImp<VARIANT_TYPES>&);
343 template <
class TYPE>
363template <
class TYPES>
364struct VariantImp_Traits {
454#ifndef BDE_OMIT_INTERNAL_DEPRECATED
463 VariantImp_AllocatorBase<TYPES>,
464 VariantImp_NoAllocatorBase<TYPES> >::type
485template <
class RESULT_TYPE,
class VISITOR>
486class Variant_RawVisitorHelper {
503 template <
class ARGUMENT_TYPE>
504 RESULT_TYPE
operator()(ARGUMENT_TYPE& argument);
505 template <
class ARGUMENT_TYPE>
506 RESULT_TYPE
operator()(
const ARGUMENT_TYPE& argument);
512 template <
class ARGUMENT_TYPE>
513 RESULT_TYPE
operator()(ARGUMENT_TYPE& argument)
const;
514 template <
class ARGUMENT_TYPE>
515 RESULT_TYPE
operator()(
const ARGUMENT_TYPE& argument)
const;
546template <
class TYPES>
547class VariantImp :
public VariantImp_Traits<TYPES>::BaseType {
550 typedef VariantImp_Traits<TYPES> Traits;
551 typedef typename Traits::BaseType Base;
555 typedef VariantImp<TYPES> SelfType;
568 template <
class TYPE,
class VISITOR_REF>
570 template <
class TYPE,
class VISITOR_REF>
572 template <
class TYPE,
class VISITOR_REF>
573 void applyImp(VISITOR_REF visitor);
584 template <
class TYPE,
class VISITOR_REF,
class RET_TYPE>
586 template <
class TYPE,
class VISITOR_REF,
class RET_TYPE>
588 template <
class TYPE,
class VISITOR_REF,
class RET_TYPE>
589 RET_TYPE applyImpR(VISITOR_REF visitor);
595 template <
class TYPE,
class SOURCE_TYPE>
596 void assignImp(
const SOURCE_TYPE& value);
598 template <
class TYPE>
599#if defined(BSLMF_MOVABLEREF_USES_RVALUE_REFERENCES)
600 void assignImp(TYPE&& value);
614 template <
class TYPE>
625 template <
class VISITOR_REF>
626 void doApply(VISITOR_REF visitor,
int type);
634 template <
class VISITOR_REF,
class RET_TYPE>
635 RET_TYPE doApplyR(VISITOR_REF visitor,
int type);
647 template <
class TYPE,
class VISITOR_REF>
649 template <
class TYPE,
class VISITOR_REF>
651 template <
class TYPE,
class VISITOR_REF>
652 void applyImp(VISITOR_REF visitor)
const;
663 template <
class TYPE,
class VISITOR_REF,
class RET_TYPE>
665 template <
class TYPE,
class VISITOR_REF,
class RET_TYPE>
667 template <
class TYPE,
class VISITOR_REF,
class RET_TYPE>
668 RET_TYPE applyImpR(VISITOR_REF visitor)
const;
675 template <
class VISITOR_REF>
676 void doApply(VISITOR_REF visitor,
int type)
const;
684 template <
class VISITOR_REF,
class RET_TYPE>
685 RET_TYPE doApplyR(VISITOR_REF visitor,
int type)
const;
691 Traits::k_VARIANT_USES_BSLMA_ALLOCATOR);
694 Traits::k_VARIANT_IS_BITWISE_COPYABLE);
697 Traits::k_VARIANT_IS_BITWISE_MOVEABLE);
721 template <
class TYPE_OR_ALLOCATOR>
723 VariantImp(
const TYPE_OR_ALLOCATOR& valueOrAllocator);
730 template <
class TYPE>
733 template <
class TYPE>
735#if defined(BSLMF_MOVABLEREF_USES_RVALUE_REFERENCES)
758 template <
class TYPE>
759#if defined(BSLMF_MOVABLEREF_USES_RVALUE_REFERENCES)
815 template <
class TYPE>
818 template <
class TYPE>
819#if defined(BSLMF_MOVABLEREF_USES_RVALUE_REFERENCES)
822 typename bsl::remove_cvref<TYPE>::type>::value,
863 template <
class VISITOR>
865 typename VISITOR::ResultType>::type
866 apply(VISITOR& visitor) {
869 return doApplyR<VISITOR&,
870 typename VISITOR::ResultType>(visitor, this->d_type);
888 template <
class VISITOR>
890 typename VISITOR::ResultType>::type
891 apply(
const VISITOR& visitor) {
894 return doApplyR<
const VISITOR&,
895 typename VISITOR::ResultType>(visitor, this->d_type);
917 template <
class VISITOR,
class TYPE>
919 typename VISITOR::ResultType>::type
920 apply(VISITOR& visitor,
const TYPE& defaultValue) {
923 return doApplyR<VISITOR&,
924 typename VISITOR::ResultType>(visitor, this->d_type);
928 return visitor(defaultValue);
945 template <
class VISITOR,
class TYPE>
947 typename VISITOR::ResultType>::type
948 apply(
const VISITOR& visitor,
const TYPE& defaultValue) {
951 return doApplyR<
const VISITOR&,
952 typename VISITOR::ResultType>(visitor, this->d_type);
956 return visitor(defaultValue);
968 template <
class VISITOR>
971 apply(VISITOR& visitor) {
974 doApply<VISITOR&>(visitor, this->d_type);
991 template <
class VISITOR>
994 apply(
const VISITOR& visitor) {
997 doApply<const VISITOR&>(visitor, this->d_type);
1019 template <
class VISITOR,
class TYPE>
1022 apply(VISITOR& visitor,
const TYPE& defaultValue) {
1025 doApply<VISITOR&>(visitor, this->d_type);
1029 visitor(defaultValue);
1046 template <
class VISITOR,
class TYPE>
1049 apply(
const VISITOR& visitor,
const TYPE& defaultValue) {
1052 doApply<const VISITOR&>(visitor, this->d_type);
1056 visitor(defaultValue);
1065 template <
class RET_TYPE,
class VISITOR>
1066 RET_TYPE
apply(VISITOR& visitor);
1067 template <
class RET_TYPE,
class VISITOR>
1068 RET_TYPE
apply(
const VISITOR& visitor);
1080 template <
class RET_TYPE,
class VISITOR,
class TYPE>
1081 RET_TYPE
apply(VISITOR& visitor,
const TYPE& defaultValue);
1082 template <
class RET_TYPE,
class VISITOR,
class TYPE>
1083 RET_TYPE
apply(
const VISITOR& visitor,
const TYPE& defaultValue);
1096 template <
class VISITOR>
1098 typename VISITOR::ResultType>::type
1101 typedef Variant_RawVisitorHelper<
typename VISITOR::ResultType,
1104 return doApplyR<
const Helper&,
1105 typename VISITOR::ResultType>(Helper(&visitor),
1120 template <
class VISITOR>
1122 typename VISITOR::ResultType>::type
1125 typedef Variant_RawVisitorHelper<
typename VISITOR::ResultType,
1126 const VISITOR> Helper;
1128 return doApplyR<
const Helper&,
1129 typename VISITOR::ResultType>(Helper(&visitor),
1143 template <
class VISITOR>
1148 typedef Variant_RawVisitorHelper<void, VISITOR> Helper;
1150 doApply<const Helper&>(Helper(&visitor), this->d_type);
1163 template <
class VISITOR>
1168 typedef Variant_RawVisitorHelper<void, const VISITOR> Helper;
1170 doApply<const Helper&>(Helper(&visitor), this->d_type);
1179 template <
class RET_TYPE,
class VISITOR>
1180 RET_TYPE
applyRaw(VISITOR& visitor);
1181 template <
class RET_TYPE,
class VISITOR>
1182 RET_TYPE
applyRaw(
const VISITOR& visitor);
1189 template <
class TYPE>
1192 template <
class TYPE>
1193#if defined(BSLMF_MOVABLEREF_USES_RVALUE_REFERENCES)
1213 template <
class TYPE,
class SOURCE_TYPE>
1216#if BSLS_COMPILERFEATURES_SIMULATE_VARIADIC_TEMPLATES
1219#ifndef BDLB_VARIANT_VARIADIC_LIMIT
1220#define BDLB_VARIANT_VARIADIC_LIMIT 14
1222#ifndef BDLB_VARIANT_VARIADIC_LIMIT_A
1223#define BDLB_VARIANT_VARIADIC_LIMIT_A BDLB_VARIANT_VARIADIC_LIMIT
1226#if BDLB_VARIANT_VARIADIC_LIMIT_A >= 0
1227 template <
class TYPE>
1231#if BDLB_VARIANT_VARIADIC_LIMIT_A >= 1
1232 template <
class TYPE,
class ARGS_01>
1237#if BDLB_VARIANT_VARIADIC_LIMIT_A >= 2
1238 template <
class TYPE,
class ARGS_01,
1245#if BDLB_VARIANT_VARIADIC_LIMIT_A >= 3
1246 template <
class TYPE,
class ARGS_01,
1255#if BDLB_VARIANT_VARIADIC_LIMIT_A >= 4
1256 template <
class TYPE,
class ARGS_01,
1267#if BDLB_VARIANT_VARIADIC_LIMIT_A >= 5
1268 template <
class TYPE,
class ARGS_01,
1281#if BDLB_VARIANT_VARIADIC_LIMIT_A >= 6
1282 template <
class TYPE,
class ARGS_01,
1297#if BDLB_VARIANT_VARIADIC_LIMIT_A >= 7
1298 template <
class TYPE,
class ARGS_01,
1315#if BDLB_VARIANT_VARIADIC_LIMIT_A >= 8
1316 template <
class TYPE,
class ARGS_01,
1335#if BDLB_VARIANT_VARIADIC_LIMIT_A >= 9
1336 template <
class TYPE,
class ARGS_01,
1357#if BDLB_VARIANT_VARIADIC_LIMIT_A >= 10
1358 template <
class TYPE,
class ARGS_01,
1381#if BDLB_VARIANT_VARIADIC_LIMIT_A >= 11
1382 template <
class TYPE,
class ARGS_01,
1407#if BDLB_VARIANT_VARIADIC_LIMIT_A >= 12
1408 template <
class TYPE,
class ARGS_01,
1435#if BDLB_VARIANT_VARIADIC_LIMIT_A >= 13
1436 template <
class TYPE,
class ARGS_01,
1465#if BDLB_VARIANT_VARIADIC_LIMIT_A >= 14
1466 template <
class TYPE,
class ARGS_01,
1501 template <
class TYPE,
class... ARGS>
1525 template <
class TYPE>
1539 template <
class VISITOR>
1541 typename VISITOR::ResultType>::type
1542 apply(VISITOR& visitor)
const {
1545 return doApplyR<VISITOR&,
1546 typename VISITOR::ResultType>(visitor, this->d_type);
1551 return visitor(nil);
1563 template <
class VISITOR>
1565 typename VISITOR::ResultType>::type
1566 apply(
const VISITOR& visitor)
const {
1569 return doApplyR<
const VISITOR&,
1570 typename VISITOR::ResultType>(visitor, this->d_type);
1575 return visitor(nil);
1592 template <
class VISITOR,
class TYPE>
1594 typename VISITOR::ResultType>::type
1595 apply(VISITOR& visitor,
const TYPE& defaultValue)
const {
1598 return doApplyR<VISITOR&,
1599 typename VISITOR::ResultType>(visitor, this->d_type);
1603 return visitor(defaultValue);
1620 template <
class VISITOR,
class TYPE>
1622 typename VISITOR::ResultType>::type
1623 apply(
const VISITOR& visitor,
const TYPE& defaultValue)
const {
1626 return doApplyR<
const VISITOR&,
1627 typename VISITOR::ResultType>(visitor, this->d_type);
1631 return visitor(defaultValue);
1643 template <
class VISITOR>
1646 apply(VISITOR& visitor)
const {
1649 doApply<VISITOR&>(visitor, this->d_type);
1666 template <
class VISITOR>
1669 apply(
const VISITOR& visitor)
const {
1672 doApply<const VISITOR&>(visitor, this->d_type);
1694 template <
class VISITOR,
class TYPE>
1697 apply(VISITOR& visitor,
const TYPE& defaultValue)
const {
1700 doApply<VISITOR&>(visitor, this->d_type);
1704 visitor(defaultValue);
1721 template <
class VISITOR,
class TYPE>
1724 apply(
const VISITOR& visitor,
const TYPE& defaultValue)
const {
1727 doApply<const VISITOR&>(visitor, this->d_type);
1731 visitor(defaultValue);
1739 template <
class RET_TYPE,
class VISITOR>
1740 RET_TYPE
apply(VISITOR& visitor)
const;
1741 template <
class RET_TYPE,
class VISITOR>
1742 RET_TYPE
apply(
const VISITOR& visitor)
const;
1753 template <
class RET_TYPE,
class VISITOR,
class TYPE>
1754 RET_TYPE
apply(VISITOR& visitor,
const TYPE& defaultValue)
const;
1755 template <
class RET_TYPE,
class VISITOR,
class TYPE>
1756 RET_TYPE
apply(
const VISITOR& visitor,
const TYPE& defaultValue)
const;
1768 template <
class VISITOR>
1770 typename VISITOR::ResultType>::type
1773 typedef Variant_RawVisitorHelper<
typename VISITOR::ResultType,
1776 return doApplyR<
const Helper&,
1777 typename VISITOR::ResultType>(Helper(&visitor),
1791 template <
class VISITOR>
1793 typename VISITOR::ResultType>::type
1794 applyRaw(
const VISITOR& visitor)
const {
1796 typedef Variant_RawVisitorHelper<
typename VISITOR::ResultType,
1797 const VISITOR> Helper;
1799 return doApplyR<
const Helper&,
1800 typename VISITOR::ResultType>(Helper(&visitor),
1814 template <
class VISITOR>
1819 typedef Variant_RawVisitorHelper<void, VISITOR> Helper;
1821 return doApply<const Helper&>(Helper(&visitor), this->d_type);
1834 template <
class VISITOR>
1837 applyRaw(
const VISITOR& visitor)
const {
1839 typedef Variant_RawVisitorHelper<void, const VISITOR> Helper;
1841 return doApply<const Helper&>(Helper(&visitor), this->d_type);
1849 template <
class RET_TYPE,
class VISITOR>
1850 RET_TYPE
applyRaw(VISITOR& visitor)
const;
1851 template <
class RET_TYPE,
class VISITOR>
1852 RET_TYPE
applyRaw(
const VISITOR& visitor)
const;
1859 template <
class TYPE>
1885 bsl::ostream&
print(bsl::ostream& stream,
1887 int spacesPerLevel = 4)
const;
1897 template <
class TYPE>
1898 const TYPE&
the()
const;
1908#ifndef BDE_OMIT_INTERNAL_DEPRECATED
1912 const bsl::type_info&
typeInfo()
const;
1915 template <
class STREAM>
1922 template <
class STREAM>
1934template <
class TYPES>
1936 const VariantImp<TYPES>& rhs);
1943template <
class TYPES>
1945 const VariantImp<TYPES>& rhs);
1950template <
class TYPES>
1951bsl::ostream&
operator<<(bsl::ostream& stream,
1952 const VariantImp<TYPES>&
object);
1960template <
class TYPES>
1961void swap(VariantImp<TYPES>& a, VariantImp<TYPES>& b);
1967#if defined(BDLB_VARIANT_USING_VARIADIC_TEMPLATES)
1968template <
class ...TYPES>
1969class Variant :
public VariantImp<typename bslmf::TypeList<TYPES...>::ListType>
1984 A6, A7, A8, A9, A10,
1985 A11, A12, A13, A14, A15,
1986 A16, A17, A18, A19, A20>::ListType> {
1996#if defined(BDLB_VARIANT_USING_VARIADIC_TEMPLATES)
2000 typedef Variant<TYPES...> SelfType;
2003 A7, A8, A9, A10, A11, A12,
2004 A13, A14, A15, A16, A17, A18,
2005 A19, A20>::ListType> Imp;
2007 typedef Variant<A1, A2, A3, A4, A5, A6, A7, A8, A9, A10,
2008 A11, A12, A13, A14, A15, A16, A17, A18, A19, A20> SelfType;
2012 typedef VariantImp_Traits<typename Imp::TypeList> Traits;
2019 Traits::k_VARIANT_USES_BSLMA_ALLOCATOR);
2022 Traits::k_VARIANT_IS_BITWISE_COPYABLE);
2025 Traits::k_VARIANT_IS_BITWISE_MOVEABLE);
2049 template <
class TYPE_OR_ALLOCATOR>
2051 Variant(
const TYPE_OR_ALLOCATOR& valueOrAllocator);
2058 template <
class TYPE>
2061 template <
class TYPE>
2063#if defined(BSLMF_MOVABLEREF_USES_RVALUE_REFERENCES)
2086 template <
class TYPE>
2087#if defined(BSLMF_MOVABLEREF_USES_RVALUE_REFERENCES)
2138 template <
class TYPE>
2141 template <
class TYPE>
2142#if defined(BSLMF_MOVABLEREF_USES_RVALUE_REFERENCES)
2145 typename bsl::remove_cvref<TYPE>::type>::value,
2187template <
class A1,
class A2>
2188class Variant2 :
public VariantImp<typename bslmf::TypeList2<
2189 A1, A2>::ListType> {
2192 typedef VariantImp<typename bslmf::TypeList2<A1, A2>::ListType> Imp;
2195 typedef Variant2<A1, A2> SelfType;
2197 typedef VariantImp_Traits<typename Imp::TypeList> Traits;
2204 Traits::k_VARIANT_USES_BSLMA_ALLOCATOR);
2207 Traits::k_VARIANT_IS_BITWISE_COPYABLE);
2210 Traits::k_VARIANT_IS_BITWISE_MOVEABLE);
2234 template <
class TYPE_OR_ALLOCATOR>
2236 Variant2(
const TYPE_OR_ALLOCATOR& valueOrAllocator);
2243 template <
class TYPE>
2246 template <
class TYPE>
2248#if defined(BSLMF_MOVABLEREF_USES_RVALUE_REFERENCES)
2249 Variant2(TYPE&& value,
2271 template <
class TYPE>
2272#if defined(BSLMF_MOVABLEREF_USES_RVALUE_REFERENCES)
2273 Variant2(TYPE&& value,
2323 template <
class TYPE>
2324 Variant2& operator=(
const TYPE& value);
2326 template <
class TYPE>
2327#if defined(BSLMF_MOVABLEREF_USES_RVALUE_REFERENCES)
2330 typename bsl::remove_cvref<TYPE>::type>::value,
2332 operator=(TYPE&& value);
2352 Variant2& operator=(
const Variant2& rhs);
2372template <
class A1,
class A2,
class A3>
2373class Variant3 :
public VariantImp<typename bslmf::TypeList3<
2374 A1, A2, A3>::ListType> {
2381 typedef Variant3<A1, A2, A3> SelfType;
2383 typedef VariantImp_Traits<typename Imp::TypeList> Traits;
2390 Traits::k_VARIANT_USES_BSLMA_ALLOCATOR);
2393 Traits::k_VARIANT_IS_BITWISE_COPYABLE);
2396 Traits::k_VARIANT_IS_BITWISE_MOVEABLE);
2420 template <
class TYPE_OR_ALLOCATOR>
2422 Variant3(
const TYPE_OR_ALLOCATOR& valueOrAllocator);
2429 template <
class TYPE>
2432 template <
class TYPE>
2434#if defined(BSLMF_MOVABLEREF_USES_RVALUE_REFERENCES)
2435 Variant3(TYPE&& value,
2457 template <
class TYPE>
2458#if defined(BSLMF_MOVABLEREF_USES_RVALUE_REFERENCES)
2459 Variant3(TYPE&& value,
2509 template <
class TYPE>
2510 Variant3& operator=(
const TYPE& value);
2512 template <
class TYPE>
2513#if defined(BSLMF_MOVABLEREF_USES_RVALUE_REFERENCES)
2516 typename bsl::remove_cvref<TYPE>::type>::value,
2518 operator=(TYPE&& value);
2538 Variant3& operator=(
const Variant3& rhs);
2558template <
class A1,
class A2,
class A3,
class A4>
2559class Variant4 :
public VariantImp<typename bslmf::TypeList4<
2560 A1, A2, A3, A4>::ListType> {
2567 typedef Variant4<A1, A2, A3, A4> SelfType;
2569 typedef VariantImp_Traits<typename Imp::TypeList> Traits;
2576 Traits::k_VARIANT_USES_BSLMA_ALLOCATOR);
2579 Traits::k_VARIANT_IS_BITWISE_COPYABLE);
2582 Traits::k_VARIANT_IS_BITWISE_MOVEABLE);
2606 template <
class TYPE_OR_ALLOCATOR>
2608 Variant4(
const TYPE_OR_ALLOCATOR& valueOrAllocator);
2615 template <
class TYPE>
2618 template <
class TYPE>
2620#if defined(BSLMF_MOVABLEREF_USES_RVALUE_REFERENCES)
2621 Variant4(TYPE&& value,
2643 template <
class TYPE>
2644#if defined(BSLMF_MOVABLEREF_USES_RVALUE_REFERENCES)
2645 Variant4(TYPE&& value,
2695 template <
class TYPE>
2696 Variant4& operator=(
const TYPE& value);
2698 template <
class TYPE>
2699#if defined(BSLMF_MOVABLEREF_USES_RVALUE_REFERENCES)
2702 typename bsl::remove_cvref<TYPE>::type>::value,
2704 operator=(TYPE&& value);
2724 Variant4& operator=(
const Variant4& rhs);
2744template <
class A1,
class A2,
class A3,
class A4,
class A5>
2745class Variant5 :
public VariantImp<typename bslmf::TypeList5<
2746 A1, A2, A3, A4, A5>::ListType> {
2753 typedef Variant5<A1, A2, A3, A4, A5> SelfType;
2755 typedef VariantImp_Traits<typename Imp::TypeList> Traits;
2762 Traits::k_VARIANT_USES_BSLMA_ALLOCATOR);
2765 Traits::k_VARIANT_IS_BITWISE_COPYABLE);
2768 Traits::k_VARIANT_IS_BITWISE_MOVEABLE);
2792 template <
class TYPE_OR_ALLOCATOR>
2794 Variant5(
const TYPE_OR_ALLOCATOR& valueOrAllocator);
2801 template <
class TYPE>
2804 template <
class TYPE>
2806#if defined(BSLMF_MOVABLEREF_USES_RVALUE_REFERENCES)
2807 Variant5(TYPE&& value,
2829 template <
class TYPE>
2830#if defined(BSLMF_MOVABLEREF_USES_RVALUE_REFERENCES)
2831 Variant5(TYPE&& value,
2881 template <
class TYPE>
2882 Variant5& operator=(
const TYPE& value);
2884 template <
class TYPE>
2885#if defined(BSLMF_MOVABLEREF_USES_RVALUE_REFERENCES)
2888 typename bsl::remove_cvref<TYPE>::type>::value,
2890 operator=(TYPE&& value);
2910 Variant5& operator=(
const Variant5& rhs);
2930template <
class A1,
class A2,
class A3,
class A4,
class A5,
class A6>
2931class Variant6 :
public VariantImp<typename bslmf::TypeList6<
2932 A1, A2, A3, A4, A5, A6>::ListType> {
2939 typedef Variant6<A1, A2, A3, A4, A5, A6> SelfType;
2941 typedef VariantImp_Traits<typename Imp::TypeList> Traits;
2948 Traits::k_VARIANT_USES_BSLMA_ALLOCATOR);
2951 Traits::k_VARIANT_IS_BITWISE_COPYABLE);
2954 Traits::k_VARIANT_IS_BITWISE_MOVEABLE);
2978 template <
class TYPE_OR_ALLOCATOR>
2980 Variant6(
const TYPE_OR_ALLOCATOR& valueOrAllocator);
2987 template <
class TYPE>
2990 template <
class TYPE>
2992#if defined(BSLMF_MOVABLEREF_USES_RVALUE_REFERENCES)
2993 Variant6(TYPE&& value,
3015 template <
class TYPE>
3016#if defined(BSLMF_MOVABLEREF_USES_RVALUE_REFERENCES)
3017 Variant6(TYPE&& value,
3067 template <
class TYPE>
3068 Variant6& operator=(
const TYPE& value);
3070 template <
class TYPE>
3071#if defined(BSLMF_MOVABLEREF_USES_RVALUE_REFERENCES)
3074 typename bsl::remove_cvref<TYPE>::type>::value,
3076 operator=(TYPE&& value);
3096 Variant6& operator=(
const Variant6& rhs);
3116template <
class A1,
class A2,
class A3,
class A4,
class A5,
class A6,
3118class Variant7 :
public VariantImp<typename bslmf::TypeList7<
3119 A1, A2, A3, A4, A5, A6, A7>::ListType> {
3126 typedef Variant7<A1, A2, A3, A4, A5, A6, A7> SelfType;
3128 typedef VariantImp_Traits<typename Imp::TypeList> Traits;
3135 Traits::k_VARIANT_USES_BSLMA_ALLOCATOR);
3138 Traits::k_VARIANT_IS_BITWISE_COPYABLE);
3141 Traits::k_VARIANT_IS_BITWISE_MOVEABLE);
3165 template <
class TYPE_OR_ALLOCATOR>
3167 Variant7(
const TYPE_OR_ALLOCATOR& valueOrAllocator);
3174 template <
class TYPE>
3177 template <
class TYPE>
3179#if defined(BSLMF_MOVABLEREF_USES_RVALUE_REFERENCES)
3180 Variant7(TYPE&& value,
3202 template <
class TYPE>
3203#if defined(BSLMF_MOVABLEREF_USES_RVALUE_REFERENCES)
3204 Variant7(TYPE&& value,
3254 template <
class TYPE>
3255 Variant7& operator=(
const TYPE& value);
3257 template <
class TYPE>
3258#if defined(BSLMF_MOVABLEREF_USES_RVALUE_REFERENCES)
3261 typename bsl::remove_cvref<TYPE>::type>::value,
3263 operator=(TYPE&& value);
3283 Variant7& operator=(
const Variant7& rhs);
3303template <
class A1,
class A2,
class A3,
class A4,
class A5,
class A6,
3305class Variant8 :
public VariantImp<typename bslmf::TypeList8<
3306 A1, A2, A3, A4, A5, A6, A7, A8>::ListType> {
3313 typedef Variant8<A1, A2, A3, A4, A5, A6, A7, A8> SelfType;
3315 typedef VariantImp_Traits<typename Imp::TypeList> Traits;
3322 Traits::k_VARIANT_USES_BSLMA_ALLOCATOR);
3325 Traits::k_VARIANT_IS_BITWISE_COPYABLE);
3328 Traits::k_VARIANT_IS_BITWISE_MOVEABLE);
3352 template <
class TYPE_OR_ALLOCATOR>
3354 Variant8(
const TYPE_OR_ALLOCATOR& valueOrAllocator);
3361 template <
class TYPE>
3364 template <
class TYPE>
3366#if defined(BSLMF_MOVABLEREF_USES_RVALUE_REFERENCES)
3367 Variant8(TYPE&& value,
3389 template <
class TYPE>
3390#if defined(BSLMF_MOVABLEREF_USES_RVALUE_REFERENCES)
3391 Variant8(TYPE&& value,
3441 template <
class TYPE>
3442 Variant8& operator=(
const TYPE& value);
3444 template <
class TYPE>
3445#if defined(BSLMF_MOVABLEREF_USES_RVALUE_REFERENCES)
3448 typename bsl::remove_cvref<TYPE>::type>::value,
3450 operator=(TYPE&& value);
3470 Variant8& operator=(
const Variant8& rhs);
3490template <
class A1,
class A2,
class A3,
class A4,
class A5,
class A6,
3491 class A7,
class A8,
class A9>
3492class Variant9 :
public VariantImp<typename bslmf::TypeList9<
3493 A1, A2, A3, A4, A5, A6, A7, A8, A9>::ListType> {
3497 A8, A9>::ListType> Imp;
3500 typedef Variant9<A1, A2, A3, A4, A5, A6, A7, A8, A9> SelfType;
3502 typedef VariantImp_Traits<typename Imp::TypeList> Traits;
3509 Traits::k_VARIANT_USES_BSLMA_ALLOCATOR);
3512 Traits::k_VARIANT_IS_BITWISE_COPYABLE);
3515 Traits::k_VARIANT_IS_BITWISE_MOVEABLE);
3539 template <
class TYPE_OR_ALLOCATOR>
3541 Variant9(
const TYPE_OR_ALLOCATOR& valueOrAllocator);
3548 template <
class TYPE>
3551 template <
class TYPE>
3553#if defined(BSLMF_MOVABLEREF_USES_RVALUE_REFERENCES)
3554 Variant9(TYPE&& value,
3576 template <
class TYPE>
3577#if defined(BSLMF_MOVABLEREF_USES_RVALUE_REFERENCES)
3578 Variant9(TYPE&& value,
3628 template <
class TYPE>
3629 Variant9& operator=(
const TYPE& value);
3631 template <
class TYPE>
3632#if defined(BSLMF_MOVABLEREF_USES_RVALUE_REFERENCES)
3635 typename bsl::remove_cvref<TYPE>::type>::value,
3637 operator=(TYPE&& value);
3657 Variant9& operator=(
const Variant9& rhs);
3677template <
class A1,
class A2,
class A3,
class A4,
class A5,
class A6,
3678 class A7,
class A8,
class A9,
class A10>
3679class Variant10 :
public VariantImp<typename bslmf::TypeList10<
3680 A1, A2, A3, A4, A5, A6, A7, A8, A9, A10>::ListType> {
3685 A10>::ListType> Imp;
3688 typedef Variant10<A1, A2, A3, A4, A5, A6, A7, A8, A9, A10> SelfType;
3690 typedef VariantImp_Traits<typename Imp::TypeList> Traits;
3697 Traits::k_VARIANT_USES_BSLMA_ALLOCATOR);
3700 Traits::k_VARIANT_IS_BITWISE_COPYABLE);
3703 Traits::k_VARIANT_IS_BITWISE_MOVEABLE);
3727 template <
class TYPE_OR_ALLOCATOR>
3729 Variant10(
const TYPE_OR_ALLOCATOR& valueOrAllocator);
3736 template <
class TYPE>
3739 template <
class TYPE>
3741#if defined(BSLMF_MOVABLEREF_USES_RVALUE_REFERENCES)
3742 Variant10(TYPE&& value,
3764 template <
class TYPE>
3765#if defined(BSLMF_MOVABLEREF_USES_RVALUE_REFERENCES)
3766 Variant10(TYPE&& value,
3791 Variant10(
const Variant10& original,
bslma::Allocator *basicAllocator = 0);
3816 template <
class TYPE>
3817 Variant10& operator=(
const TYPE& value);
3819 template <
class TYPE>
3820#if defined(BSLMF_MOVABLEREF_USES_RVALUE_REFERENCES)
3823 typename bsl::remove_cvref<TYPE>::type>::value,
3825 operator=(TYPE&& value);
3845 Variant10& operator=(
const Variant10& rhs);
3865template <
class A1,
class A2,
class A3,
class A4,
class A5,
class A6,
3866 class A7,
class A8,
class A9,
class A10,
class A11>
3867class Variant11 :
public VariantImp<typename bslmf::TypeList11<
3868 A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11>::ListType> {
3873 A11>::ListType> Imp;
3876 typedef Variant11<A1, A2, A3, A4, A5, A6, A7, A8, A9, A10,
3879 typedef VariantImp_Traits<typename Imp::TypeList> Traits;
3886 Traits::k_VARIANT_USES_BSLMA_ALLOCATOR);
3889 Traits::k_VARIANT_IS_BITWISE_COPYABLE);
3892 Traits::k_VARIANT_IS_BITWISE_MOVEABLE);
3916 template <
class TYPE_OR_ALLOCATOR>
3918 Variant11(
const TYPE_OR_ALLOCATOR& valueOrAllocator);
3925 template <
class TYPE>
3928 template <
class TYPE>
3930#if defined(BSLMF_MOVABLEREF_USES_RVALUE_REFERENCES)
3931 Variant11(TYPE&& value,
3953 template <
class TYPE>
3954#if defined(BSLMF_MOVABLEREF_USES_RVALUE_REFERENCES)
3955 Variant11(TYPE&& value,
3980 Variant11(
const Variant11& original,
bslma::Allocator *basicAllocator = 0);
4005 template <
class TYPE>
4006 Variant11& operator=(
const TYPE& value);
4008 template <
class TYPE>
4009#if defined(BSLMF_MOVABLEREF_USES_RVALUE_REFERENCES)
4012 typename bsl::remove_cvref<TYPE>::type>::value,
4014 operator=(TYPE&& value);
4034 Variant11& operator=(
const Variant11& rhs);
4054template <
class A1,
class A2,
class A3,
class A4,
class A5,
class A6,
4055 class A7,
class A8,
class A9,
class A10,
class A11,
class A12>
4056class Variant12 :
public VariantImp<typename bslmf::TypeList12<
4057 A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12>::ListType> {
4061 A7, A8, A9, A10, A11,
4062 A12>::ListType> Imp;
4065 typedef Variant12<A1, A2, A3, A4, A5, A6, A7, A8, A9, A10,
4068 typedef VariantImp_Traits<typename Imp::TypeList> Traits;
4075 Traits::k_VARIANT_USES_BSLMA_ALLOCATOR);
4078 Traits::k_VARIANT_IS_BITWISE_COPYABLE);
4081 Traits::k_VARIANT_IS_BITWISE_MOVEABLE);
4105 template <
class TYPE_OR_ALLOCATOR>
4107 Variant12(
const TYPE_OR_ALLOCATOR& valueOrAllocator);
4114 template <
class TYPE>
4117 template <
class TYPE>
4119#if defined(BSLMF_MOVABLEREF_USES_RVALUE_REFERENCES)
4120 Variant12(TYPE&& value,
4142 template <
class TYPE>
4143#if defined(BSLMF_MOVABLEREF_USES_RVALUE_REFERENCES)
4144 Variant12(TYPE&& value,
4169 Variant12(
const Variant12& original,
bslma::Allocator *basicAllocator = 0);
4194 template <
class TYPE>
4195 Variant12& operator=(
const TYPE& value);
4197 template <
class TYPE>
4198#if defined(BSLMF_MOVABLEREF_USES_RVALUE_REFERENCES)
4201 typename bsl::remove_cvref<TYPE>::type>::value,
4203 operator=(TYPE&& value);
4223 Variant12& operator=(
const Variant12& rhs);
4243template <
class A1,
class A2,
class A3,
class A4,
class A5,
class A6,
4244 class A7,
class A8,
class A9,
class A10,
class A11,
class A12,
4246class Variant13 :
public VariantImp<typename bslmf::TypeList13<
4247 A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13>::ListType> {
4251 A7, A8, A9, A10, A11, A12,
4252 A13>::ListType> Imp;
4255 typedef Variant13<A1, A2, A3, A4, A5, A6, A7, A8, A9,
4256 A10, A11, A12, A13> SelfType;
4258 typedef VariantImp_Traits<typename Imp::TypeList> Traits;
4265 Traits::k_VARIANT_USES_BSLMA_ALLOCATOR);
4268 Traits::k_VARIANT_IS_BITWISE_COPYABLE);
4271 Traits::k_VARIANT_IS_BITWISE_MOVEABLE);
4295 template <
class TYPE_OR_ALLOCATOR>
4297 Variant13(
const TYPE_OR_ALLOCATOR& valueOrAllocator);
4304 template <
class TYPE>
4307 template <
class TYPE>
4309#if defined(BSLMF_MOVABLEREF_USES_RVALUE_REFERENCES)
4310 Variant13(TYPE&& value,
4332 template <
class TYPE>
4333#if defined(BSLMF_MOVABLEREF_USES_RVALUE_REFERENCES)
4334 Variant13(TYPE&& value,
4359 Variant13(
const Variant13& original,
bslma::Allocator *basicAllocator = 0);
4384 template <
class TYPE>
4385 Variant13& operator=(
const TYPE& value);
4387 template <
class TYPE>
4388#if defined(BSLMF_MOVABLEREF_USES_RVALUE_REFERENCES)
4391 typename bsl::remove_cvref<TYPE>::type>::value,
4393 operator=(TYPE&& value);
4413 Variant13& operator=(
const Variant13& rhs);
4433template <
class A1,
class A2,
class A3,
class A4,
class A5,
class A6,
4434 class A7,
class A8,
class A9,
class A10,
class A11,
class A12,
4435 class A13,
class A14>
4436class Variant14 :
public VariantImp<typename bslmf::TypeList14<
4438 A6, A7, A8, A9, A10,
4439 A11, A12, A13, A14>::ListType> {
4443 A7, A8, A9, A10, A11, A12,
4445 A14>::ListType> Imp;
4448 typedef Variant14<A1, A2, A3, A4, A5, A6, A7, A8, A9,
4449 A10, A11, A12, A13, A14> SelfType;
4451 typedef VariantImp_Traits<typename Imp::TypeList> Traits;
4458 Traits::k_VARIANT_USES_BSLMA_ALLOCATOR);
4461 Traits::k_VARIANT_IS_BITWISE_COPYABLE);
4464 Traits::k_VARIANT_IS_BITWISE_MOVEABLE);
4488 template <
class TYPE_OR_ALLOCATOR>
4490 Variant14(
const TYPE_OR_ALLOCATOR& valueOrAllocator);
4497 template <
class TYPE>
4500 template <
class TYPE>
4502#if defined(BSLMF_MOVABLEREF_USES_RVALUE_REFERENCES)
4503 Variant14(TYPE&& value,
4525 template <
class TYPE>
4526#if defined(BSLMF_MOVABLEREF_USES_RVALUE_REFERENCES)
4527 Variant14(TYPE&& value,
4552 Variant14(
const Variant14& original,
bslma::Allocator *basicAllocator = 0);
4577 template <
class TYPE>
4578 Variant14& operator=(
const TYPE& value);
4580 template <
class TYPE>
4581#if defined(BSLMF_MOVABLEREF_USES_RVALUE_REFERENCES)
4584 typename bsl::remove_cvref<TYPE>::type>::value,
4586 operator=(TYPE&& value);
4606 Variant14& operator=(
const Variant14& rhs);
4626template <
class A1,
class A2,
class A3,
class A4,
class A5,
class A6,
4627 class A7,
class A8,
class A9,
class A10,
class A11,
class A12,
4628 class A13,
class A14,
class A15>
4629class Variant15 :
public VariantImp<typename bslmf::TypeList15<
4631 A6, A7, A8, A9, A10,
4632 A11, A12, A13, A14, A15>::ListType> {
4636 A7, A8, A9, A10, A11, A12,
4638 A15>::ListType> Imp;
4641 typedef Variant15<A1, A2, A3, A4, A5, A6, A7, A8, A9,
4642 A10, A11, A12, A13, A14, A15> SelfType;
4644 typedef VariantImp_Traits<typename Imp::TypeList> Traits;
4651 Traits::k_VARIANT_USES_BSLMA_ALLOCATOR);
4654 Traits::k_VARIANT_IS_BITWISE_COPYABLE);
4657 Traits::k_VARIANT_IS_BITWISE_MOVEABLE);
4681 template <
class TYPE_OR_ALLOCATOR>
4683 Variant15(
const TYPE_OR_ALLOCATOR& valueOrAllocator);
4690 template <
class TYPE>
4693 template <
class TYPE>
4695#if defined(BSLMF_MOVABLEREF_USES_RVALUE_REFERENCES)
4696 Variant15(TYPE&& value,
4718 template <
class TYPE>
4719#if defined(BSLMF_MOVABLEREF_USES_RVALUE_REFERENCES)
4720 Variant15(TYPE&& value,
4745 Variant15(
const Variant15& original,
bslma::Allocator *basicAllocator = 0);
4770 template <
class TYPE>
4771 Variant15& operator=(
const TYPE& value);
4773 template <
class TYPE>
4774#if defined(BSLMF_MOVABLEREF_USES_RVALUE_REFERENCES)
4777 typename bsl::remove_cvref<TYPE>::type>::value,
4779 operator=(TYPE&& value);
4799 Variant15& operator=(
const Variant15& rhs);
4819template <
class A1,
class A2,
class A3,
class A4,
class A5,
class A6,
4820 class A7,
class A8,
class A9,
class A10,
class A11,
class A12,
4821 class A13,
class A14,
class A15,
class A16>
4822class Variant16 :
public VariantImp<typename bslmf::TypeList16<
4824 A6, A7, A8, A9, A10,
4825 A11, A12, A13, A14, A15,
4830 A7, A8, A9, A10, A11, A12,
4832 A16>::ListType> Imp;
4835 typedef Variant16<A1, A2, A3, A4, A5, A6, A7, A8, A9,
4836 A10, A11, A12, A13, A14, A15, A16> SelfType;
4838 typedef VariantImp_Traits<typename Imp::TypeList> Traits;
4845 Traits::k_VARIANT_USES_BSLMA_ALLOCATOR);
4848 Traits::k_VARIANT_IS_BITWISE_COPYABLE);
4851 Traits::k_VARIANT_IS_BITWISE_MOVEABLE);
4875 template <
class TYPE_OR_ALLOCATOR>
4877 Variant16(
const TYPE_OR_ALLOCATOR& valueOrAllocator);
4884 template <
class TYPE>
4887 template <
class TYPE>
4889#if defined(BSLMF_MOVABLEREF_USES_RVALUE_REFERENCES)
4890 Variant16(TYPE&& value,
4912 template <
class TYPE>
4913#if defined(BSLMF_MOVABLEREF_USES_RVALUE_REFERENCES)
4914 Variant16(TYPE&& value,
4939 Variant16(
const Variant16& original,
bslma::Allocator *basicAllocator = 0);
4964 template <
class TYPE>
4965 Variant16& operator=(
const TYPE& value);
4967 template <
class TYPE>
4968#if defined(BSLMF_MOVABLEREF_USES_RVALUE_REFERENCES)
4971 typename bsl::remove_cvref<TYPE>::type>::value,
4973 operator=(TYPE&& value);
4993 Variant16& operator=(
const Variant16& rhs);
5013template <
class A1,
class A2,
class A3,
class A4,
class A5,
class A6,
5014 class A7,
class A8,
class A9,
class A10,
class A11,
class A12,
5015 class A13,
class A14,
class A15,
class A16,
class A17>
5016class Variant17 :
public VariantImp<typename bslmf::TypeList17<
5018 A6, A7, A8, A9, A10,
5019 A11, A12, A13, A14, A15,
5020 A16, A17>::ListType> {
5024 A7, A8, A9, A10, A11, A12,
5026 A17>::ListType> Imp;
5029 typedef Variant17<A1, A2, A3, A4, A5, A6, A7, A8, A9,
5030 A10, A11, A12, A13, A14, A15, A16, A17> SelfType;
5032 typedef VariantImp_Traits<typename Imp::TypeList> Traits;
5039 Traits::k_VARIANT_USES_BSLMA_ALLOCATOR);
5042 Traits::k_VARIANT_IS_BITWISE_COPYABLE);
5045 Traits::k_VARIANT_IS_BITWISE_MOVEABLE);
5069 template <
class TYPE_OR_ALLOCATOR>
5071 Variant17(
const TYPE_OR_ALLOCATOR& valueOrAllocator);
5078 template <
class TYPE>
5081 template <
class TYPE>
5083#if defined(BSLMF_MOVABLEREF_USES_RVALUE_REFERENCES)
5084 Variant17(TYPE&& value,
5106 template <
class TYPE>
5107#if defined(BSLMF_MOVABLEREF_USES_RVALUE_REFERENCES)
5108 Variant17(TYPE&& value,
5133 Variant17(
const Variant17& original,
bslma::Allocator *basicAllocator = 0);
5158 template <
class TYPE>
5159 Variant17& operator=(
const TYPE& value);
5161 template <
class TYPE>
5162#if defined(BSLMF_MOVABLEREF_USES_RVALUE_REFERENCES)
5165 typename bsl::remove_cvref<TYPE>::type>::value,
5167 operator=(TYPE&& value);
5187 Variant17& operator=(
const Variant17& rhs);
5207template <
class A1,
class A2,
class A3,
class A4,
class A5,
class A6,
5208 class A7,
class A8,
class A9,
class A10,
class A11,
class A12,
5209 class A13,
class A14,
class A15,
class A16,
class A17,
class A18>
5210class Variant18 :
public VariantImp<typename bslmf::TypeList18<
5212 A6, A7, A8, A9, A10,
5213 A11, A12, A13, A14, A15,
5214 A16, A17, A18>::ListType> {
5218 A7, A8, A9, A10, A11, A12,
5219 A13, A14, A15, A16, A17,
5220 A18>::ListType> Imp;
5223 typedef Variant18<A1, A2, A3, A4, A5, A6, A7, A8, A9,
5224 A10, A11, A12, A13, A14, A15, A16, A17, A18> SelfType;
5226 typedef VariantImp_Traits<typename Imp::TypeList> Traits;
5233 Traits::k_VARIANT_USES_BSLMA_ALLOCATOR);
5236 Traits::k_VARIANT_IS_BITWISE_COPYABLE);
5239 Traits::k_VARIANT_IS_BITWISE_MOVEABLE);
5263 template <
class TYPE_OR_ALLOCATOR>
5265 Variant18(
const TYPE_OR_ALLOCATOR& valueOrAllocator);
5272 template <
class TYPE>
5275 template <
class TYPE>
5277#if defined(BSLMF_MOVABLEREF_USES_RVALUE_REFERENCES)
5278 Variant18(TYPE&& value,
5300 template <
class TYPE>
5301#if defined(BSLMF_MOVABLEREF_USES_RVALUE_REFERENCES)
5302 Variant18(TYPE&& value,
5327 Variant18(
const Variant18& original,
bslma::Allocator *basicAllocator = 0);
5352 template <
class TYPE>
5353 Variant18& operator=(
const TYPE& value);
5355 template <
class TYPE>
5356#if defined(BSLMF_MOVABLEREF_USES_RVALUE_REFERENCES)
5359 typename bsl::remove_cvref<TYPE>::type>::value,
5361 operator=(TYPE&& value);
5381 Variant18& operator=(
const Variant18& rhs);
5401template <
class A1,
class A2,
class A3,
class A4,
class A5,
class A6,
5402 class A7,
class A8,
class A9,
class A10,
class A11,
class A12,
5403 class A13,
class A14,
class A15,
class A16,
class A17,
class A18,
5405class Variant19 :
public VariantImp<typename bslmf::TypeList19<
5407 A6, A7, A8, A9, A10,
5408 A11, A12, A13, A14, A15,
5409 A16, A17, A18, A19>::ListType> {
5413 A7, A8, A9, A10, A11, A12,
5414 A13, A14, A15, A16, A17, A18,
5415 A19>::ListType> Imp;
5418 typedef Variant19<A1, A2, A3, A4, A5, A6, A7, A8, A9,
5419 A10, A11, A12, A13, A14, A15, A16, A17, A18,
5422 typedef VariantImp_Traits<typename Imp::TypeList> Traits;
5429 Traits::k_VARIANT_USES_BSLMA_ALLOCATOR);
5432 Traits::k_VARIANT_IS_BITWISE_COPYABLE);
5435 Traits::k_VARIANT_IS_BITWISE_MOVEABLE);
5459 template <
class TYPE_OR_ALLOCATOR>
5461 Variant19(
const TYPE_OR_ALLOCATOR& valueOrAllocator);
5468 template <
class TYPE>
5471 template <
class TYPE>
5473#if defined(BSLMF_MOVABLEREF_USES_RVALUE_REFERENCES)
5474 Variant19(TYPE&& value,
5496 template <
class TYPE>
5497#if defined(BSLMF_MOVABLEREF_USES_RVALUE_REFERENCES)
5498 Variant19(TYPE&& value,
5523 Variant19(
const Variant19& original,
bslma::Allocator *basicAllocator = 0);
5548 template <
class TYPE>
5549 Variant19& operator=(
const TYPE& value);
5551 template <
class TYPE>
5552#if defined(BSLMF_MOVABLEREF_USES_RVALUE_REFERENCES)
5555 typename bsl::remove_cvref<TYPE>::type>::value,
5557 operator=(TYPE&& value);
5577 Variant19& operator=(
const Variant19& rhs);
5600template <
class TYPES,
class TYPE>
5601struct Variant_TypeIndex {
5671#if defined(BDLB_VARIANT_USING_VARIADIC_TEMPLATES)
5698struct Variant_DefaultConstructVisitor {
5706 : d_allocator_p(allocator)
5711 template <
class TYPE>
5712 void operator()(TYPE& value)
const
5728struct Variant_CopyConstructVisitor {
5736 : d_buffer_p(buffer)
5737 , d_allocator_p(allocator)
5743 template <
class TYPE>
5744 void operator()(
const TYPE& value)
const
5747 reinterpret_cast<TYPE *
>(d_buffer_p),
5763struct Variant_MoveConstructVisitor {
5771 : d_buffer_p(buffer)
5772 , d_allocator_p(allocator)
5778 template <
class TYPE>
5779 void operator()(TYPE& value)
const
5782 reinterpret_cast<TYPE *
>(d_buffer_p),
5796struct Variant_DestructorVisitor {
5799 template <
class TYPE>
5800 void operator()(TYPE&
object)
const
5802 bslma::DestructionUtil::destroy(&
object);
5816struct Variant_CopyAssignVisitor {
5823 Variant_CopyAssignVisitor(
void *buffer)
5824 : d_buffer_p(buffer)
5830 template <
class TYPE>
5831 void operator()(
const TYPE& value)
5833 *
reinterpret_cast<TYPE *
>(d_buffer_p) = value;
5847struct Variant_MoveAssignVisitor {
5854 Variant_MoveAssignVisitor(
void *buffer)
5855 : d_buffer_p(buffer)
5861 template <
class TYPE>
5862 void operator()(TYPE& value)
5864 *
reinterpret_cast<TYPE *
>(d_buffer_p) =
5879struct Variant_SwapVisitor {
5886 Variant_SwapVisitor(
void *buffer)
5887 : d_buffer_p(buffer)
5893 template <
class TYPE>
5894 void operator()(TYPE& value)
5900#ifndef BDE_OMIT_INTERNAL_DEPRECATED
5913template <
class STREAM>
5914struct Variant_BdexStreamInVisitor {
5921 Variant_BdexStreamInVisitor(STREAM& stream,
int version)
5923 , d_version(version)
5928 template <
class VALUETYPE>
5930 void operator()(VALUETYPE&
object)
const
5953template <
class STREAM>
5954struct Variant_BdexStreamOutVisitor {
5961 Variant_BdexStreamOutVisitor(STREAM& stream,
int version)
5963 , d_version(version)
5968 template <
class VALUETYPE>
5970 void operator()(
const VALUETYPE&
object)
const
5993struct Variant_PrintVisitor {
5996 bsl::ostream *d_stream_p;
5998 int d_spacesPerLevel;
6001 Variant_PrintVisitor(bsl::ostream *stream,
6004 : d_stream_p(stream)
6006 , d_spacesPerLevel(spacesPerLevel)
6012 template <
class TYPE>
6013 void operator()(
const TYPE& value)
const
6015 PrintMethods::print(*d_stream_p, value, d_level, d_spacesPerLevel);
6035struct Variant_EqualityTestVisitor {
6038 mutable bool d_result;
6039 const void *d_buffer_p;
6043 Variant_EqualityTestVisitor(
const void *buffer)
6045 , d_buffer_p(buffer)
6051 template <
class TYPE>
6052 void operator()(
const TYPE& value)
const
6054 d_result = *
reinterpret_cast<const TYPE *
>(d_buffer_p) == value;
6072template <
class TYPES>
6077, d_allocator_p(
bslma::Default::allocator(basicAllocator))
6081template <
class TYPES>
6083VariantImp_AllocatorBase<TYPES>::
6086, d_allocator_p(
bslma::Default::allocator(basicAllocator))
6090template <
class TYPES>
6091template <
class TYPE>
6093VariantImp_AllocatorBase<TYPES>::
6096, d_allocator_p(
bslma::Default::allocator(0))
6101template <
class TYPES>
6104VariantImp_AllocatorBase<TYPES>::getAllocator()
const
6106 return d_allocator_p;
6114template <
class TYPES>
6116VariantImp_NoAllocatorBase<TYPES>::
6122template <
class TYPES>
6124VariantImp_NoAllocatorBase<TYPES>::
6130template <
class TYPES>
6131template <
class TYPE>
6133VariantImp_NoAllocatorBase<TYPES>::
6140template <
class TYPES>
6143VariantImp_NoAllocatorBase<TYPES>::getAllocator()
const
6153template <
class RESULT_TYPE,
class VISITOR>
6155Variant_RawVisitorHelper<RESULT_TYPE, VISITOR>::
6156Variant_RawVisitorHelper(VISITOR *visitor)
6163template <
class RESULT_TYPE,
class VISITOR>
6164template <
class ARGUMENT_TYPE>
6167Variant_RawVisitorHelper<RESULT_TYPE, VISITOR>::operator()(
6168 ARGUMENT_TYPE& argument)
6170 return static_cast<RESULT_TYPE
>((*d_visitor)(argument));
6173template <
class RESULT_TYPE,
class VISITOR>
6174template <
class ARGUMENT_TYPE>
6177Variant_RawVisitorHelper<RESULT_TYPE, VISITOR>::operator()(
6178 const ARGUMENT_TYPE& argument)
6180 return static_cast<RESULT_TYPE
>((*d_visitor)(argument));
6184template <
class RESULT_TYPE,
class VISITOR>
6185template <
class ARGUMENT_TYPE>
6188Variant_RawVisitorHelper<RESULT_TYPE, VISITOR>::operator()(
6189 ARGUMENT_TYPE& argument)
const
6191 return static_cast<RESULT_TYPE
>((*d_visitor)(argument));
6194template <
class RESULT_TYPE,
class VISITOR>
6195template <
class ARGUMENT_TYPE>
6198Variant_RawVisitorHelper<RESULT_TYPE, VISITOR>::operator()(
6199 const ARGUMENT_TYPE& argument)
const
6201 return static_cast<RESULT_TYPE
>((*d_visitor)(argument));
6204template <
class RESULT_TYPE,
class VISITOR>
6206Variant_RawVisitorHelper<RESULT_TYPE, VISITOR>::operator()(
bslmf::Nil)
const
6216template <
class TYPES>
6217template <
class TYPE,
class VISITOR_REF>
6223 visitor(
reinterpret_cast<BufferType *
>(&this->d_value)->
object());
6226template <
class TYPES>
6227template <
class TYPE,
class VISITOR_REF>
6229void VariantImp<TYPES>::applyImp(VISITOR_REF visitor,
bsl::true_type)
6235template <
class TYPES>
6236template <
class TYPE,
class VISITOR_REF>
6238void VariantImp<TYPES>::applyImp(VISITOR_REF visitor)
6241 applyImp<TYPE, VISITOR_REF>(visitor, IsUnset());
6244template <
class TYPES>
6245template <
class TYPE,
class VISITOR_REF,
class RET_TYPE>
6247RET_TYPE VariantImp<TYPES>::applyImpR(VISITOR_REF visitor,
bsl::false_type)
6251 return visitor(
reinterpret_cast<BufferType *
>(&this->d_value)->
object());
6254template <
class TYPES>
6255template <
class TYPE,
class VISITOR_REF,
class RET_TYPE>
6257RET_TYPE VariantImp<TYPES>::applyImpR(VISITOR_REF visitor,
bsl::true_type)
6260 return visitor(nil);
6263template <
class TYPES>
6264template <
class TYPE,
class VISITOR_REF,
class RET_TYPE>
6266RET_TYPE VariantImp<TYPES>::applyImpR(VISITOR_REF visitor)
6269 return applyImpR<TYPE, VISITOR_REF, RET_TYPE>(visitor, IsUnset());
6272template <
class TYPES>
6273template <
class TYPE,
class SOURCE_TYPE>
6274void VariantImp<TYPES>::assignImp(
const SOURCE_TYPE& value)
6280 reinterpret_cast<BufferType *
>(&this->d_value)->address(),
6281 this->getAllocator(),
6283 this->d_type = Variant_TypeIndex<TYPES, TYPE>::value;
6286template <
class TYPES>
6287template <
class TYPE>
6288#if defined(BSLMF_MOVABLEREF_USES_RVALUE_REFERENCES)
6289void VariantImp<TYPES>::assignImp(TYPE&& value)
6299#if defined(BSLMF_MOVABLEREF_USES_RVALUE_REFERENCES)
6301 reinterpret_cast<BufferType *
>(&this->d_value)->address(),
6302 this->getAllocator(),
6305 TYPE& lvalue = value;
6307 reinterpret_cast<BufferType *
>(&this->d_value)->address(),
6308 this->getAllocator(),
6313 Variant_TypeIndex<TYPES,
6317template <
class TYPES>
6318template <
class VISITOR_REF>
6319void VariantImp<TYPES>::doApply(VISITOR_REF visitor,
int type)
6323 BSLS_ASSERT(0 ==
"'doApply' invoked on an unset variant");
6326 applyImp<typename Base::Type1, VISITOR_REF>(visitor);
6329 applyImp<typename Base::Type2, VISITOR_REF>(visitor);
6332 applyImp<typename Base::Type3, VISITOR_REF>(visitor);
6335 applyImp<typename Base::Type4, VISITOR_REF>(visitor);
6338 applyImp<typename Base::Type5, VISITOR_REF>(visitor);
6341 applyImp<typename Base::Type6, VISITOR_REF>(visitor);
6344 applyImp<typename Base::Type7, VISITOR_REF>(visitor);
6347 applyImp<typename Base::Type8, VISITOR_REF>(visitor);
6350 applyImp<typename Base::Type9, VISITOR_REF>(visitor);
6353 applyImp<typename Base::Type10, VISITOR_REF>(visitor);
6356 applyImp<typename Base::Type11, VISITOR_REF>(visitor);
6359 applyImp<typename Base::Type12, VISITOR_REF>(visitor);
6362 applyImp<typename Base::Type13, VISITOR_REF>(visitor);
6365 applyImp<typename Base::Type14, VISITOR_REF>(visitor);
6368 applyImp<typename Base::Type15, VISITOR_REF>(visitor);
6371 applyImp<typename Base::Type16, VISITOR_REF>(visitor);
6374 applyImp<typename Base::Type17, VISITOR_REF>(visitor);
6377 applyImp<typename Base::Type18, VISITOR_REF>(visitor);
6380 applyImp<typename Base::Type19, VISITOR_REF>(visitor);
6383 applyImp<typename Base::Type20, VISITOR_REF>(visitor);
6391template <
class TYPES>
6392template <
class TYPE>
6399 reinterpret_cast<BufferType *
>(&this->d_value)->address(),
6400 this->getAllocator(),
6404template <
class TYPES>
6410template <
class TYPES>
6411template <
class VISITOR_REF,
class RET_TYPE>
6412RET_TYPE VariantImp<TYPES>::doApplyR(VISITOR_REF visitor,
int type)
6419 return applyImpR<
typename Base::Type1,
6424 return applyImpR<
typename Base::Type2,
6429 return applyImpR<
typename Base::Type3,
6434 return applyImpR<
typename Base::Type4,
6439 return applyImpR<
typename Base::Type5,
6444 return applyImpR<
typename Base::Type6,
6449 return applyImpR<
typename Base::Type7,
6454 return applyImpR<
typename Base::Type8,
6459 return applyImpR<
typename Base::Type9,
6464 return applyImpR<
typename Base::Type10,
6469 return applyImpR<
typename Base::Type11,
6474 return applyImpR<
typename Base::Type12,
6479 return applyImpR<
typename Base::Type13,
6484 return applyImpR<
typename Base::Type14,
6489 return applyImpR<
typename Base::Type15,
6494 return applyImpR<
typename Base::Type16,
6499 return applyImpR<
typename Base::Type17,
6504 return applyImpR<
typename Base::Type18,
6509 return applyImpR<
typename Base::Type19,
6514 return applyImpR<
typename Base::Type20,
6525template <
class TYPES>
6526template <
class TYPE,
class VISITOR_REF>
6528void VariantImp<TYPES>::applyImp(VISITOR_REF visitor,
bsl::false_type)
const
6532 visitor(
reinterpret_cast<const BufferType *
>(&this->d_value)->
object());
6535template <
class TYPES>
6536template <
class TYPE,
class VISITOR_REF>
6538void VariantImp<TYPES>::applyImp(VISITOR_REF visitor,
bsl::true_type)
const
6544template <
class TYPES>
6545template <
class TYPE,
class VISITOR_REF>
6547void VariantImp<TYPES>::applyImp(VISITOR_REF visitor)
const
6550 applyImp<TYPE, VISITOR_REF>(visitor, IsUnset());
6553template <
class TYPES>
6554template <
class TYPE,
class VISITOR_REF,
class RET_TYPE>
6556RET_TYPE VariantImp<TYPES>::applyImpR(VISITOR_REF visitor,
6561 return visitor(
reinterpret_cast<const BufferType *
>(
6562 &this->d_value)->
object());
6565template <
class TYPES>
6566template <
class TYPE,
class VISITOR_REF,
class RET_TYPE>
6568RET_TYPE VariantImp<TYPES>::applyImpR(VISITOR_REF visitor,
6572 return visitor(nil);
6575template <
class TYPES>
6576template <
class TYPE,
class VISITOR_REF,
class RET_TYPE>
6578RET_TYPE VariantImp<TYPES>::applyImpR(VISITOR_REF visitor)
const
6581 return applyImpR<TYPE, VISITOR_REF, RET_TYPE>(visitor, IsUnset());
6584template <
class TYPES>
6585template <
class VISITOR_REF>
6586void VariantImp<TYPES>::doApply(VISITOR_REF visitor,
int type)
const
6593 applyImp<typename Base::Type1, VISITOR_REF>(visitor);
6596 applyImp<typename Base::Type2, VISITOR_REF>(visitor);
6599 applyImp<typename Base::Type3, VISITOR_REF>(visitor);
6602 applyImp<typename Base::Type4, VISITOR_REF>(visitor);
6605 applyImp<typename Base::Type5, VISITOR_REF>(visitor);
6608 applyImp<typename Base::Type6, VISITOR_REF>(visitor);
6611 applyImp<typename Base::Type7, VISITOR_REF>(visitor);
6614 applyImp<typename Base::Type8, VISITOR_REF>(visitor);
6617 applyImp<typename Base::Type9, VISITOR_REF>(visitor);
6620 applyImp<typename Base::Type10, VISITOR_REF>(visitor);
6623 applyImp<typename Base::Type11, VISITOR_REF>(visitor);
6626 applyImp<typename Base::Type12, VISITOR_REF>(visitor);
6629 applyImp<typename Base::Type13, VISITOR_REF>(visitor);
6632 applyImp<typename Base::Type14, VISITOR_REF>(visitor);
6635 applyImp<typename Base::Type15, VISITOR_REF>(visitor);
6638 applyImp<typename Base::Type16, VISITOR_REF>(visitor);
6641 applyImp<typename Base::Type17, VISITOR_REF>(visitor);
6644 applyImp<typename Base::Type18, VISITOR_REF>(visitor);
6647 applyImp<typename Base::Type19, VISITOR_REF>(visitor);
6650 applyImp<typename Base::Type20, VISITOR_REF>(visitor);
6658template <
class TYPES>
6659template <
class VISITOR_REF,
class RET_TYPE>
6660RET_TYPE VariantImp<TYPES>::doApplyR(VISITOR_REF visitor,
int type)
const
6667 return applyImpR<
typename Base::Type1,
6672 return applyImpR<
typename Base::Type2,
6677 return applyImpR<
typename Base::Type3,
6682 return applyImpR<
typename Base::Type4,
6687 return applyImpR<
typename Base::Type5,
6692 return applyImpR<
typename Base::Type6,
6697 return applyImpR<
typename Base::Type7,
6702 return applyImpR<
typename Base::Type8,
6707 return applyImpR<
typename Base::Type9,
6712 return applyImpR<
typename Base::Type10,
6717 return applyImpR<
typename Base::Type11,
6722 return applyImpR<
typename Base::Type12,
6727 return applyImpR<
typename Base::Type13,
6732 return applyImpR<
typename Base::Type14,
6737 return applyImpR<
typename Base::Type15,
6742 return applyImpR<
typename Base::Type16,
6747 return applyImpR<
typename Base::Type17,
6752 return applyImpR<
typename Base::Type18,
6757 return applyImpR<
typename Base::Type19,
6762 return applyImpR<
typename Base::Type20,
6773template <
class TYPES>
6775VariantImp<TYPES>::VariantImp()
6780template <
class TYPES>
6781template <
class TYPE_OR_ALLOCATOR>
6783VariantImp<TYPES>::VariantImp(
const TYPE_OR_ALLOCATOR& valueOrAllocator)
6784: Base(Variant_TypeIndex<TYPES, TYPE_OR_ALLOCATOR>::value,
6786 bsl::integral_constant<bool,
bsl::is_convertible<TYPE_OR_ALLOCATOR,
6787 bslma::Allocator *>::value>())
6797template <
class TYPES>
6798template <
class TYPE>
6800VariantImp<TYPES>::VariantImp(
const TYPE& value,
6802: Base(Variant_TypeIndex<TYPES, TYPE>::value, basicAllocator)
6807 reinterpret_cast<BufferType *
>(&this->d_value)->address(),
6808 this->getAllocator(),
6812template <
class TYPES>
6813template <
class TYPE>
6815#if defined(BSLMF_MOVABLEREF_USES_RVALUE_REFERENCES)
6816VariantImp(TYPE&& value,
6828: Base(Variant_TypeIndex<
6838#if defined(BSLMF_MOVABLEREF_USES_RVALUE_REFERENCES)
6840 reinterpret_cast<BufferType *
>(&this->d_value)->address(),
6841 this->getAllocator(),
6844 TYPE& lvalue = value;
6846 reinterpret_cast<BufferType *
>(&this->d_value)->address(),
6847 this->getAllocator(),
6852template <
class TYPES>
6853template <
class TYPE>
6855#if defined(BSLMF_MOVABLEREF_USES_RVALUE_REFERENCES)
6856VariantImp(TYPE&& value,
6867: Base(Variant_TypeIndex<
6877#if defined(BSLMF_MOVABLEREF_USES_RVALUE_REFERENCES)
6879 reinterpret_cast<BufferType *
>(&this->d_value)->address(),
6880 this->getAllocator(),
6883 TYPE& lvalue = value;
6885 reinterpret_cast<BufferType *
>(&this->d_value)->address(),
6886 this->getAllocator(),
6891template <
class TYPES>
6892VariantImp<TYPES>::VariantImp(
const VariantImp& original,
6894: Base(original.d_type, basicAllocator)
6897 Variant_CopyConstructVisitor copyConstructor(&this->d_value,
6898 this->getAllocator());
6899 original.apply(copyConstructor);
6903template <
class TYPES>
6905: Base(MoveUtil::access(original).d_type,
6906 MoveUtil::access(original).getAllocator())
6909 Variant_MoveConstructVisitor moveConstructor(&this->d_value,
6910 this->getAllocator());
6911 VariantImp& lvalue = original;
6913 lvalue.apply(moveConstructor);
6917template <
class TYPES>
6920: Base(MoveUtil::access(original).d_type, basicAllocator)
6923 Variant_MoveConstructVisitor moveConstructor(&this->d_value,
6924 this->getAllocator());
6925 VariantImp& lvalue = original;
6927 lvalue.apply(moveConstructor);
6931template <
class TYPES>
6933VariantImp<TYPES>::~VariantImp()
6939template <
class TYPES>
6940template <
class TYPE>
6943VariantImp<TYPES>::operator=(
const TYPE& value)
6948template <
class TYPES>
6949template <
class TYPE>
6951#if defined(BSLMF_MOVABLEREF_USES_RVALUE_REFERENCES)
6954 typename bsl::remove_cvref<TYPE>::type>::value,
6955VariantImp<TYPES> >::type&
6956VariantImp<TYPES>::operator=(TYPE&& value)
6962#if defined(BSLMF_MOVABLEREF_USES_RVALUE_REFERENCES)
6965 TYPE& lvalue = value;
6966 return assign(MoveUtil::move(lvalue));
6970template <
class TYPES>
6972VariantImp<TYPES>::operator=(
const VariantImp& rhs)
6975 if (this->d_type ==
rhs.d_type) {
6977 Variant_CopyAssignVisitor assigner(&this->d_value);
6978 rhs.apply(assigner);
6984 Variant_CopyConstructVisitor copyConstructor(
6986 this->getAllocator());
6987 rhs.apply(copyConstructor);
6988 this->d_type =
rhs.d_type;
6996template <
class TYPES>
7000 VariantImp& lvalue =
rhs;
7002 if (&lvalue !=
this) {
7003 if (this->d_type == lvalue.d_type) {
7005 Variant_MoveAssignVisitor assigner(&this->d_value);
7006 lvalue.apply(assigner);
7011 if (lvalue.d_type) {
7012 Variant_MoveConstructVisitor moveConstructor(
7014 this->getAllocator());
7015 lvalue.apply(moveConstructor);
7016 this->d_type = lvalue.d_type;
7024template <
class TYPES>
7025template <
class RET_TYPE,
class VISITOR>
7027RET_TYPE VariantImp<TYPES>::apply(VISITOR& visitor)
7030 return doApplyR<VISITOR&, RET_TYPE>(visitor, this->d_type);
7034 return visitor(nil);
7037template <
class TYPES>
7038template <
class RET_TYPE,
class VISITOR>
7040RET_TYPE VariantImp<TYPES>::apply(
const VISITOR& visitor)
7043 return doApplyR<const VISITOR&, RET_TYPE>(visitor, this->d_type);
7048 return visitor(nil);
7051template <
class TYPES>
7052template <
class RET_TYPE,
class VISITOR,
class TYPE>
7054RET_TYPE VariantImp<TYPES>::apply(VISITOR& visitor,
const TYPE& defaultValue)
7057 return doApplyR<VISITOR&, RET_TYPE>(visitor, this->d_type);
7060 return visitor(defaultValue);
7063template <
class TYPES>
7064template <
class RET_TYPE,
class VISITOR,
class TYPE>
7066RET_TYPE VariantImp<TYPES>::apply(
const VISITOR& visitor,
7067 const TYPE& defaultValue)
7070 return doApplyR<const VISITOR&, RET_TYPE>(visitor, this->d_type);
7074 return visitor(defaultValue);
7077template <
class TYPES>
7078template <
class RET_TYPE,
class VISITOR>
7080RET_TYPE VariantImp<TYPES>::applyRaw(VISITOR& visitor)
7082 typedef Variant_RawVisitorHelper<RET_TYPE, VISITOR> Helper;
7084 return doApplyR<const Helper&, RET_TYPE>(Helper(&visitor), this->d_type);
7087template <
class TYPES>
7088template <
class RET_TYPE,
class VISITOR>
7090RET_TYPE VariantImp<TYPES>::applyRaw(
const VISITOR& visitor)
7092 typedef Variant_RawVisitorHelper<RET_TYPE, const VISITOR> Helper;
7094 return doApplyR<const Helper&, RET_TYPE>(Helper(&visitor), this->d_type);
7097template <
class TYPES>
7098template <
class TYPE>
7099VariantImp<TYPES>& VariantImp<TYPES>::assign(
const TYPE& value)
7103 if (Variant_TypeIndex<TYPES, TYPE>::value == this->d_type) {
7104 reinterpret_cast<BufferType *
>(&this->d_value)->
object() = value;
7107 assignImp<TYPE, TYPE>(value);
7113template <
class TYPES>
7114template <
class TYPE>
7115#if defined(BSLMF_MOVABLEREF_USES_RVALUE_REFERENCES)
7116VariantImp<TYPES>& VariantImp<TYPES>::assign(TYPE&& value)
7124#if defined(BSLMF_MOVABLEREF_USES_RVALUE_REFERENCES)
7125 if (Variant_TypeIndex<TYPES,
7128 reinterpret_cast<BufferType *
>(&this->d_value)->
object() =
7135 TYPE& lvalue = value;
7137 if (Variant_TypeIndex<TYPES, TYPE>::value == this->d_type) {
7138 reinterpret_cast<BufferType *
>(&this->d_value)->
object() =
7139 MoveUtil::move(lvalue);
7142 assignImp<TYPE>(MoveUtil::move(lvalue));
7149template <
class TYPES>
7150template <
class TYPE,
class SOURCE_TYPE>
7151VariantImp<TYPES>& VariantImp<TYPES>::assignTo(
const SOURCE_TYPE& value)
7155 if (Variant_TypeIndex<TYPES, TYPE>::value == this->d_type
7157 reinterpret_cast<BufferType *
>(&this->d_value)->
object() = value;
7160 assignImp<TYPE, SOURCE_TYPE>(value);
7166#if BSLS_COMPILERFEATURES_SIMULATE_VARIADIC_TEMPLATES
7169#ifndef BDLB_VARIANT_VARIADIC_LIMIT
7170#define BDLB_VARIANT_VARIADIC_LIMIT 14
7172#ifndef BDLB_VARIANT_VARIADIC_LIMIT_B
7173#define BDLB_VARIANT_VARIADIC_LIMIT_B BDLB_VARIANT_VARIADIC_LIMIT
7176#if BDLB_VARIANT_VARIADIC_LIMIT_B >= 0
7177template <
class TYPES>
7178template <
class TYPE>
7180TYPE& VariantImp<TYPES>::createInPlace(
7184 BufferType& bufR = *
reinterpret_cast<BufferType *
>(&this->d_value);
7189 this->getAllocator());
7190 this->d_type = Variant_TypeIndex<TYPES, TYPE>::value;
7192 return bufR.object();
7196#if BDLB_VARIANT_VARIADIC_LIMIT_B >= 1
7197template <
class TYPES>
7198template <
class TYPE,
class ARGS_01>
7200TYPE& VariantImp<TYPES>::createInPlace(
7204 BufferType& bufR = *
reinterpret_cast<BufferType *
>(&this->d_value);
7209 this->getAllocator(),
7211 this->d_type = Variant_TypeIndex<TYPES, TYPE>::value;
7213 return bufR.object();
7217#if BDLB_VARIANT_VARIADIC_LIMIT_B >= 2
7218template <
class TYPES>
7219template <
class TYPE,
class ARGS_01,
7222TYPE& VariantImp<TYPES>::createInPlace(
7227 BufferType& bufR = *
reinterpret_cast<BufferType *
>(&this->d_value);
7232 this->getAllocator(),
7235 this->d_type = Variant_TypeIndex<TYPES, TYPE>::value;
7237 return bufR.object();
7241#if BDLB_VARIANT_VARIADIC_LIMIT_B >= 3
7242template <
class TYPES>
7243template <
class TYPE,
class ARGS_01,
7247TYPE& VariantImp<TYPES>::createInPlace(
7253 BufferType& bufR = *
reinterpret_cast<BufferType *
>(&this->d_value);
7258 this->getAllocator(),
7262 this->d_type = Variant_TypeIndex<TYPES, TYPE>::value;
7264 return bufR.object();
7268#if BDLB_VARIANT_VARIADIC_LIMIT_B >= 4
7269template <
class TYPES>
7270template <
class TYPE,
class ARGS_01,
7275TYPE& VariantImp<TYPES>::createInPlace(
7282 BufferType& bufR = *
reinterpret_cast<BufferType *
>(&this->d_value);
7287 this->getAllocator(),
7292 this->d_type = Variant_TypeIndex<TYPES, TYPE>::value;
7294 return bufR.object();
7298#if BDLB_VARIANT_VARIADIC_LIMIT_B >= 5
7299template <
class TYPES>
7300template <
class TYPE,
class ARGS_01,
7306TYPE& VariantImp<TYPES>::createInPlace(
7314 BufferType& bufR = *
reinterpret_cast<BufferType *
>(&this->d_value);
7319 this->getAllocator(),
7325 this->d_type = Variant_TypeIndex<TYPES, TYPE>::value;
7327 return bufR.object();
7331#if BDLB_VARIANT_VARIADIC_LIMIT_B >= 6
7332template <
class TYPES>
7333template <
class TYPE,
class ARGS_01,
7340TYPE& VariantImp<TYPES>::createInPlace(
7349 BufferType& bufR = *
reinterpret_cast<BufferType *
>(&this->d_value);
7354 this->getAllocator(),
7361 this->d_type = Variant_TypeIndex<TYPES, TYPE>::value;
7363 return bufR.object();
7367#if BDLB_VARIANT_VARIADIC_LIMIT_B >= 7
7368template <
class TYPES>
7369template <
class TYPE,
class ARGS_01,
7377TYPE& VariantImp<TYPES>::createInPlace(
7387 BufferType& bufR = *
reinterpret_cast<BufferType *
>(&this->d_value);
7392 this->getAllocator(),
7400 this->d_type = Variant_TypeIndex<TYPES, TYPE>::value;
7402 return bufR.object();
7406#if BDLB_VARIANT_VARIADIC_LIMIT_B >= 8
7407template <
class TYPES>
7408template <
class TYPE,
class ARGS_01,
7417TYPE& VariantImp<TYPES>::createInPlace(
7428 BufferType& bufR = *
reinterpret_cast<BufferType *
>(&this->d_value);
7433 this->getAllocator(),
7442 this->d_type = Variant_TypeIndex<TYPES, TYPE>::value;
7444 return bufR.object();
7448#if BDLB_VARIANT_VARIADIC_LIMIT_B >= 9
7449template <
class TYPES>
7450template <
class TYPE,
class ARGS_01,
7460TYPE& VariantImp<TYPES>::createInPlace(
7472 BufferType& bufR = *
reinterpret_cast<BufferType *
>(&this->d_value);
7477 this->getAllocator(),
7487 this->d_type = Variant_TypeIndex<TYPES, TYPE>::value;
7489 return bufR.object();
7493#if BDLB_VARIANT_VARIADIC_LIMIT_B >= 10
7494template <
class TYPES>
7495template <
class TYPE,
class ARGS_01,
7506TYPE& VariantImp<TYPES>::createInPlace(
7519 BufferType& bufR = *
reinterpret_cast<BufferType *
>(&this->d_value);
7524 this->getAllocator(),
7535 this->d_type = Variant_TypeIndex<TYPES, TYPE>::value;
7537 return bufR.object();
7541#if BDLB_VARIANT_VARIADIC_LIMIT_B >= 11
7542template <
class TYPES>
7543template <
class TYPE,
class ARGS_01,
7555TYPE& VariantImp<TYPES>::createInPlace(
7569 BufferType& bufR = *
reinterpret_cast<BufferType *
>(&this->d_value);
7574 this->getAllocator(),
7586 this->d_type = Variant_TypeIndex<TYPES, TYPE>::value;
7588 return bufR.object();
7592#if BDLB_VARIANT_VARIADIC_LIMIT_B >= 12
7593template <
class TYPES>
7594template <
class TYPE,
class ARGS_01,
7607TYPE& VariantImp<TYPES>::createInPlace(
7622 BufferType& bufR = *
reinterpret_cast<BufferType *
>(&this->d_value);
7627 this->getAllocator(),
7640 this->d_type = Variant_TypeIndex<TYPES, TYPE>::value;
7642 return bufR.object();
7646#if BDLB_VARIANT_VARIADIC_LIMIT_B >= 13
7647template <
class TYPES>
7648template <
class TYPE,
class ARGS_01,
7662TYPE& VariantImp<TYPES>::createInPlace(
7678 BufferType& bufR = *
reinterpret_cast<BufferType *
>(&this->d_value);
7683 this->getAllocator(),
7697 this->d_type = Variant_TypeIndex<TYPES, TYPE>::value;
7699 return bufR.object();
7703#if BDLB_VARIANT_VARIADIC_LIMIT_B >= 14
7704template <
class TYPES>
7705template <
class TYPE,
class ARGS_01,
7720TYPE& VariantImp<TYPES>::createInPlace(
7737 BufferType& bufR = *
reinterpret_cast<BufferType *
>(&this->d_value);
7742 this->getAllocator(),
7757 this->d_type = Variant_TypeIndex<TYPES, TYPE>::value;
7759 return bufR.object();
7767template <
class TYPES>
7768template <
class TYPE,
class... ARGS>
7770TYPE& VariantImp<TYPES>::createInPlace(
7774 BufferType& bufR = *
reinterpret_cast<BufferType *
>(&this->d_value);
7779 this->getAllocator(),
7781 this->d_type = Variant_TypeIndex<TYPES, TYPE>::value;
7783 return bufR.object();
7789template <
class TYPES>
7790void VariantImp<TYPES>::reset()
7793 Variant_DestructorVisitor destructor;
7799template <
class TYPES>
7800void VariantImp<TYPES>::swap(VariantImp<TYPES>& other)
7802 if (!this->d_type) {
7803 if (!other.d_type) {
7809 else if (!other.d_type) {
7814 if (this->d_type == other.d_type
7815 && this->getAllocator() == other.getAllocator()) {
7819 Variant_SwapVisitor swapper(&this->d_value);
7820 other.apply(swapper);
7832template <
class TYPES>
7833template <
class TYPE>
7835TYPE& VariantImp<TYPES>::the()
7837 BSLMF_ASSERT((0 != Variant_TypeIndex<TYPES, TYPE>::value));
7842 return reinterpret_cast<BufferType *
>(&this->d_value)->
object();
7846template <
class TYPES>
7847template <
class RET_TYPE,
class VISITOR>
7849RET_TYPE VariantImp<TYPES>::apply(VISITOR& visitor)
const
7852 return doApplyR<VISITOR&, RET_TYPE>(visitor, this->d_type);
7856 return visitor(nil);
7859template <
class TYPES>
7860template <
class RET_TYPE,
class VISITOR>
7862RET_TYPE VariantImp<TYPES>::apply(
const VISITOR& visitor)
const
7865 return doApplyR<const VISITOR&, RET_TYPE>(visitor, this->d_type);
7870 return visitor(nil);
7873template <
class TYPES>
7874template <
class RET_TYPE,
class VISITOR,
class TYPE>
7876RET_TYPE VariantImp<TYPES>::apply(VISITOR& visitor,
7877 const TYPE& defaultValue)
const
7880 return doApplyR<VISITOR&, RET_TYPE>(visitor, this->d_type);
7883 return visitor(defaultValue);
7886template <
class TYPES>
7887template <
class RET_TYPE,
class VISITOR,
class TYPE>
7889RET_TYPE VariantImp<TYPES>::apply(
const VISITOR& visitor,
7890 const TYPE& defaultValue)
const
7893 return doApplyR<const VISITOR&, RET_TYPE>(visitor, this->d_type);
7897 return visitor(defaultValue);
7900template <
class TYPES>
7901template <
class RET_TYPE,
class VISITOR>
7903RET_TYPE VariantImp<TYPES>::applyRaw(VISITOR& visitor)
const
7905 typedef Variant_RawVisitorHelper<RET_TYPE, VISITOR> Helper;
7907 return doApplyR<const Helper&, RET_TYPE>(Helper(&visitor), this->d_type);
7910template <
class TYPES>
7911template <
class RET_TYPE,
class VISITOR>
7913RET_TYPE VariantImp<TYPES>::applyRaw(
const VISITOR& visitor)
const
7915 typedef Variant_RawVisitorHelper<RET_TYPE, const VISITOR> Helper;
7917 return doApplyR<const Helper&, RET_TYPE>(Helper(&visitor), this->d_type);
7920template <
class TYPES>
7921template <
class TYPE>
7923bool VariantImp<TYPES>::is()
const
7925 return Variant_TypeIndex<TYPES, TYPE>::value == this->d_type;
7928template <
class TYPES>
7930bool VariantImp<TYPES>::isUnset()
const
7932 return !this->d_type;
7935template <
class TYPES>
7937VariantImp<TYPES>::print(bsl::ostream& stream,
7939 int spacesPerLevel)
const
7942 Variant_PrintVisitor visitor(&stream, level, spacesPerLevel);
7944 doApply<const Variant_PrintVisitor&>(visitor, this->d_type);
7949template <
class TYPES>
7950template <
class TYPE>
7952const TYPE& VariantImp<TYPES>::the()
const
7954 BSLMF_ASSERT((0 != Variant_TypeIndex<TYPES, TYPE>::value));
7959 return reinterpret_cast<const BufferType *
>(&this->d_value)->
object();
7962template <
class TYPES>
7964int VariantImp<TYPES>::typeIndex()
const
7966 return this->d_type;
7969#ifndef BDE_OMIT_INTERNAL_DEPRECATED
7970template <
class TYPES>
7972const bsl::type_info& VariantImp<TYPES>::typeInfo()
const
7974 return typeid(void);
7977template <
class TYPES>
7978template <
class STREAM>
7979STREAM& VariantImp<TYPES>::bdexStreamIn(STREAM& stream,
int version)
7984 if (!stream || type < 0 || 20 < type) {
7985 stream.invalidate();
7989 if (type != this->d_type) {
7993 Variant_DefaultConstructVisitor defaultConstructor(
7994 this->getAllocator());
7995 doApply(defaultConstructor, type);
7998 this->d_type = type;
8002 Variant_BdexStreamInVisitor<STREAM> streamer(stream, version);
8003 doApply(streamer, type);
8008template <
class TYPES>
8010int VariantImp<TYPES>::maxSupportedBdexVersion()
const
8015template <
class TYPES>
8016template <
class STREAM>
8017STREAM& VariantImp<TYPES>::bdexStreamOut(STREAM& stream,
int version)
const
8022 typedef Variant_BdexStreamOutVisitor<STREAM> Streamer;
8024 Streamer streamer(stream, version);
8025 doApply<Streamer&>(streamer, this->d_type);
8035template <
class TYPES>
8037 const VariantImp<TYPES>& rhs)
8039 if (
lhs.typeIndex() !=
rhs.typeIndex()) {
8043 if (0 ==
lhs.typeIndex()) {
8047 Variant_EqualityTestVisitor visitor(&
rhs.d_value);
8050 return visitor.d_result;
8053template <
class TYPES>
8056 const VariantImp<TYPES>& rhs)
8061template <
class TYPES>
8064 const VariantImp<TYPES>&
object)
8066 return object.print(stream, 0, -1);
8070template <
class TYPES>
8072void bdlb::swap(VariantImp<TYPES>& a, VariantImp<TYPES>& b)
8084#if defined(BDLB_VARIANT_USING_VARIADIC_TEMPLATES)
8085template <
class ...TYPES>
8091template <
class ...TYPES>
8092template <
class TYPE_OR_ALLOCATOR>
8095: Imp(valueOrAllocator)
8099template <
class ...TYPES>
8100template <
class TYPE>
8102Variant<TYPES...>::Variant(
const TYPE& value,
bslma::Allocator *basicAllocator)
8103: Imp(value, basicAllocator)
8107template <
class ...TYPES>
8108template <
class TYPE>
8111#if defined(BSLMF_MOVABLEREF_USES_RVALUE_REFERENCES)
8112Variant(TYPE&& value,
8123Variant(
bslmf::MovableRef<TYPE> value)
8124: Imp(MoveUtil::move(value))
8129template <
class ...TYPES>
8130template <
class TYPE>
8133#if defined(BSLMF_MOVABLEREF_USES_RVALUE_REFERENCES)
8134Variant(TYPE&& value,
8143Variant(
bslmf::MovableRef<TYPE> value,
8144 bslma::Allocator *basicAllocator)
8145: Imp(MoveUtil::move(value), basicAllocator)
8152template <
class ...TYPES>
8154Variant<TYPES...>::Variant(
const Variant& original,
8156: Imp(static_cast<const Imp&>(original), basicAllocator)
8160template <
class ...TYPES>
8163: Imp(MoveUtil::move(static_cast<Imp&>(MoveUtil::access(original))))
8167template <
class ...TYPES>
8171: Imp(MoveUtil::move(static_cast<Imp&>(MoveUtil::access(original))),
8177template <
class ...TYPES>
8178template <
class TYPE>
8180Variant<TYPES...>& Variant<TYPES...>::operator=(
const TYPE& value)
8182 Imp::operator=(value);
8186template <
class ...TYPES>
8187template <
class TYPE>
8189#if defined(BSLMF_MOVABLEREF_USES_RVALUE_REFERENCES)
8192 typename bsl::remove_cvref<TYPE>::type>::value,
8193Variant<TYPES...> >::type&
8194Variant<TYPES...>::operator=(TYPE&& value)
8200#if defined(BSLMF_MOVABLEREF_USES_RVALUE_REFERENCES)
8203 TYPE& lvalue = value;
8204 Imp::operator=(MoveUtil::move(lvalue));
8210template <
class ...TYPES>
8212Variant<TYPES...>& Variant<TYPES...>::operator=(
const Variant& rhs)
8217 Imp::operator=(
static_cast<const Imp&
>(rhs));
8221template <
class ...TYPES>
8228 Variant& lvalue =
rhs;
8230 Imp::operator=(MoveUtil::move(
static_cast<Imp&
>(lvalue)));
8235template <
class A1,
class A2,
class A3,
class A4,
class A5,
class A6,
8236 class A7,
class A8,
class A9,
class A10,
class A11,
class A12,
8237 class A13,
class A14,
class A15,
class A16,
class A17,
class A18,
8238 class A19,
class A20>
8240Variant<A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12,
8241 A13, A14, A15, A16, A17, A18, A19, A20>::Variant()
8245template <
class A1,
class A2,
class A3,
class A4,
class A5,
class A6,
8246 class A7,
class A8,
class A9,
class A10,
class A11,
class A12,
8247 class A13,
class A14,
class A15,
class A16,
class A17,
class A18,
8248 class A19,
class A20>
8249template <
class TYPE_OR_ALLOCATOR>
8251Variant<A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12,
8252 A13, A14, A15, A16, A17, A18, A19, A20>::Variant(
8253 const TYPE_OR_ALLOCATOR& valueOrAllocator)
8254: Imp(valueOrAllocator)
8258template <
class A1,
class A2,
class A3,
class A4,
class A5,
class A6,
8259 class A7,
class A8,
class A9,
class A10,
class A11,
class A12,
8260 class A13,
class A14,
class A15,
class A16,
class A17,
class A18,
8261 class A19,
class A20>
8262template <
class TYPE>
8264Variant<A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12,
8265 A13, A14, A15, A16, A17, A18, A19, A20>::Variant(
8268: Imp(value, basicAllocator)
8272template <
class A1,
class A2,
class A3,
class A4,
class A5,
class A6,
8273 class A7,
class A8,
class A9,
class A10,
class A11,
class A12,
8274 class A13,
class A14,
class A15,
class A16,
class A17,
class A18,
8275 class A19,
class A20>
8276template <
class TYPE>
8278Variant<A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12,
8279 A13, A14, A15, A16, A17, A18, A19, A20>::
8280#if defined(BSLMF_MOVABLEREF_USES_RVALUE_REFERENCES)
8281Variant(TYPE&& value,
8292Variant(
bslmf::MovableRef<TYPE> value)
8293: Imp(MoveUtil::move(value))
8298template <
class A1,
class A2,
class A3,
class A4,
class A5,
class A6,
8299 class A7,
class A8,
class A9,
class A10,
class A11,
class A12,
8300 class A13,
class A14,
class A15,
class A16,
class A17,
class A18,
8301 class A19,
class A20>
8302template <
class TYPE>
8304Variant<A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12,
8305 A13, A14, A15, A16, A17, A18, A19, A20>::
8306#if defined(BSLMF_MOVABLEREF_USES_RVALUE_REFERENCES)
8307Variant(TYPE&& value,
8316Variant(
bslmf::MovableRef<TYPE> value,
8317 bslma::Allocator *basicAllocator)
8318: Imp(MoveUtil::move(value), basicAllocator)
8323template <
class A1,
class A2,
class A3,
class A4,
class A5,
class A6,
8324 class A7,
class A8,
class A9,
class A10,
class A11,
class A12,
8325 class A13,
class A14,
class A15,
class A16,
class A17,
class A18,
8326 class A19,
class A20>
8328Variant<A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12,
8329 A13, A14, A15, A16, A17, A18, A19, A20>::Variant(
8330 const Variant& original,
8332: Imp(static_cast<const Imp&>(original), basicAllocator)
8338template <
class A1,
class A2,
class A3,
class A4,
class A5,
class A6,
8339 class A7,
class A8,
class A9,
class A10,
class A11,
class A12,
8340 class A13,
class A14,
class A15,
class A16,
class A17,
class A18,
8341 class A19,
class A20>
8343Variant<A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12,
8344 A13, A14, A15, A16, A17, A18, A19, A20>::Variant(
8346: Imp(MoveUtil::move(static_cast<Imp&>(MoveUtil::access(original))))
8350template <
class A1,
class A2,
class A3,
class A4,
class A5,
class A6,
8351 class A7,
class A8,
class A9,
class A10,
class A11,
class A12,
8352 class A13,
class A14,
class A15,
class A16,
class A17,
class A18,
8353 class A19,
class A20>
8355Variant<A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12,
8356 A13, A14, A15, A16, A17, A18, A19, A20>::Variant(
8359: Imp(MoveUtil::move(static_cast<Imp&>(MoveUtil::access(original))),
8365template <
class A1,
class A2,
class A3,
class A4,
class A5,
class A6,
8366 class A7,
class A8,
class A9,
class A10,
class A11,
class A12,
8367 class A13,
class A14,
class A15,
class A16,
class A17,
class A18,
8368 class A19,
class A20>
8369template <
class TYPE>
8371Variant<A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12,
8372 A13, A14, A15, A16, A17, A18, A19, A20>&
8373Variant<A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12,
8374 A13, A14, A15, A16, A17, A18, A19, A20>::operator=(
const TYPE& value)
8376 Imp::operator=(value);
8380template <
class A1,
class A2,
class A3,
class A4,
class A5,
class A6,
8381 class A7,
class A8,
class A9,
class A10,
class A11,
class A12,
8382 class A13,
class A14,
class A15,
class A16,
class A17,
class A18,
8383 class A19,
class A20>
8384template <
class TYPE>
8386#if defined(BSLMF_MOVABLEREF_USES_RVALUE_REFERENCES)
8389 A8, A9, A10, A11, A12, A13, A14,
8390 A15, A16, A17, A18, A19, A20>,
8391 typename bsl::remove_cvref<TYPE>::type>::value,
8392Variant<A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15,
8393 A16, A17, A18, A19, A20> >::type&
8394Variant<A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15,
8395 A16, A17, A18, A19, A20>::operator=(TYPE&& value)
8397Variant<A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15,
8398 A16, A17, A18, A19, A20>&
8399Variant<A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15,
8403#if defined(BSLMF_MOVABLEREF_USES_RVALUE_REFERENCES)
8406 TYPE& lvalue = value;
8407 Imp::operator=(MoveUtil::move(lvalue));
8413template <
class A1,
class A2,
class A3,
class A4,
class A5,
class A6,
8414 class A7,
class A8,
class A9,
class A10,
class A11,
class A12,
8415 class A13,
class A14,
class A15,
class A16,
class A17,
class A18,
8416 class A19,
class A20>
8418Variant<A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12,
8419 A13, A14, A15, A16, A17, A18, A19, A20>&
8420Variant<A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12,
8421 A13, A14, A15, A16, A17, A18, A19, A20>::operator=(
const Variant&
rhs)
8426 Imp::operator=(
static_cast<const Imp&
>(rhs));
8430template <
class A1,
class A2,
class A3,
class A4,
class A5,
class A6,
8431 class A7,
class A8,
class A9,
class A10,
class A11,
class A12,
8432 class A13,
class A14,
class A15,
class A16,
class A17,
class A18,
8433 class A19,
class A20>
8435Variant<A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12,
8436 A13, A14, A15, A16, A17, A18, A19, A20>&
8437Variant<A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12,
8438 A13, A14, A15, A16, A17, A18, A19, A20>::
8444 Variant& lvalue =
rhs;
8446 Imp::operator=(MoveUtil::move(
static_cast<Imp&
>(lvalue)));
8452#ifdef BDLB_VARIANT_USING_VARIADIC_TEMPLATES
8453#undef BDLB_VARIANT_USING_VARIADIC_TEMPLATES
8461template <
class A1,
class A2>
8463Variant2<A1, A2>::Variant2()
8467template <
class A1,
class A2>
8468template <
class TYPE_OR_ALLOCATOR>
8470Variant2<A1, A2>::Variant2(
const TYPE_OR_ALLOCATOR& valueOrAllocator)
8471: Imp(valueOrAllocator)
8475template <
class A1,
class A2>
8476template <
class TYPE>
8478Variant2<A1, A2>::Variant2(
const TYPE& value,
8480: Imp(value, basicAllocator)
8484template <
class A1,
class A2>
8485template <
class TYPE>
8488#if defined(BSLMF_MOVABLEREF_USES_RVALUE_REFERENCES)
8489Variant2(TYPE&& value,
8500Variant2(
bslmf::MovableRef<TYPE> value)
8501: Imp(MoveUtil::move(value))
8506template <
class A1,
class A2>
8507template <
class TYPE>
8510#if defined(BSLMF_MOVABLEREF_USES_RVALUE_REFERENCES)
8511Variant2(TYPE&& value,
8520Variant2(
bslmf::MovableRef<TYPE> value,
8521 bslma::Allocator *basicAllocator)
8522: Imp(MoveUtil::move(value), basicAllocator)
8527template <
class A1,
class A2>
8529Variant2<A1, A2>::Variant2(
const Variant2& original,
8531: Imp(static_cast<const Imp&>(original), basicAllocator)
8535template <
class A1,
class A2>
8538: Imp(MoveUtil::move(static_cast<Imp&>(MoveUtil::access(original))))
8542template <
class A1,
class A2>
8546: Imp(MoveUtil::move(static_cast<Imp&>(MoveUtil::access(original))),
8552template <
class A1,
class A2>
8553template <
class TYPE>
8556Variant2<A1, A2>::operator=(
const TYPE& value)
8558 Imp::operator=(value);
8562template <
class A1,
class A2>
8563template <
class TYPE>
8565#if defined(BSLMF_MOVABLEREF_USES_RVALUE_REFERENCES)
8568 typename bsl::remove_cvref<TYPE>::type>::value,
8569Variant2<A1, A2> >::type&
8570Variant2<A1, A2>::operator=(TYPE&& value)
8576#if defined(BSLMF_MOVABLEREF_USES_RVALUE_REFERENCES)
8579 TYPE& lvalue = value;
8580 Imp::operator=(MoveUtil::move(lvalue));
8586template <
class A1,
class A2>
8589Variant2<A1, A2>::operator=(
const Variant2& rhs)
8591 Imp::operator=(
static_cast<const Imp&
>(rhs));
8595template <
class A1,
class A2>
8600 Variant2& lvalue =
rhs;
8602 Imp::operator=(MoveUtil::move(
static_cast<Imp&
>(lvalue)));
8611template <
class A1,
class A2,
class A3>
8613Variant3<A1, A2, A3>::Variant3()
8617template <
class A1,
class A2,
class A3>
8618template <
class TYPE_OR_ALLOCATOR>
8620Variant3<A1, A2, A3>::
8621Variant3(
const TYPE_OR_ALLOCATOR& valueOrAllocator)
8622: Imp(valueOrAllocator)
8626template <
class A1,
class A2,
class A3>
8627template <
class TYPE>
8629Variant3<A1, A2, A3>::
8631: Imp(value, basicAllocator)
8635template <
class A1,
class A2,
class A3>
8636template <
class TYPE>
8638Variant3<A1, A2, A3>::
8639#if defined(BSLMF_MOVABLEREF_USES_RVALUE_REFERENCES)
8640Variant3(TYPE&& value,
8651Variant3(
bslmf::MovableRef<TYPE> value)
8652: Imp(MoveUtil::move(value))
8657template <
class A1,
class A2,
class A3>
8658template <
class TYPE>
8660Variant3<A1, A2, A3>::
8661#if defined(BSLMF_MOVABLEREF_USES_RVALUE_REFERENCES)
8662Variant3(TYPE&& value,
8671Variant3(
bslmf::MovableRef<TYPE> value,
8672 bslma::Allocator *basicAllocator)
8673: Imp(MoveUtil::move(value), basicAllocator)
8678template <
class A1,
class A2,
class A3>
8680Variant3<A1, A2, A3>::
8682: Imp(static_cast<const Imp&>(original), basicAllocator)
8686template <
class A1,
class A2,
class A3>
8688Variant3<A1, A2, A3>::
8690: Imp(MoveUtil::move(static_cast<Imp&>(MoveUtil::access(original))))
8694template <
class A1,
class A2,
class A3>
8696Variant3<A1, A2, A3>::
8699: Imp(MoveUtil::move(static_cast<Imp&>(MoveUtil::access(original))),
8705template <
class A1,
class A2,
class A3>
8706template <
class TYPE>
8708Variant3<A1, A2, A3>&
8709Variant3<A1, A2, A3>::operator=(
const TYPE& value)
8711 Imp::operator=(value);
8715template <
class A1,
class A2,
class A3>
8716template <
class TYPE>
8718#if defined(BSLMF_MOVABLEREF_USES_RVALUE_REFERENCES)
8721 typename bsl::remove_cvref<TYPE>::type>::value,
8722Variant3<A1, A2, A3> >::type&
8723Variant3<A1, A2, A3>::operator=(TYPE&& value)
8725Variant3<A1, A2, A3>&
8729#if defined(BSLMF_MOVABLEREF_USES_RVALUE_REFERENCES)
8732 TYPE& lvalue = value;
8733 Imp::operator=(MoveUtil::move(lvalue));
8739template <
class A1,
class A2,
class A3>
8741Variant3<A1, A2, A3>&
8742Variant3<A1, A2, A3>::operator=(
const Variant3& rhs)
8744 Imp::operator=(
static_cast<const Imp&
>(rhs));
8748template <
class A1,
class A2,
class A3>
8750Variant3<A1, A2, A3>&
8753 Variant3& lvalue =
rhs;
8755 Imp::operator=(MoveUtil::move(
static_cast<Imp&
>(lvalue)));
8764template <
class A1,
class A2,
class A3,
class A4>
8766Variant4<A1, A2, A3, A4>::Variant4()
8770template <
class A1,
class A2,
class A3,
class A4>
8771template <
class TYPE_OR_ALLOCATOR>
8773Variant4<A1, A2, A3, A4>::
8774Variant4(
const TYPE_OR_ALLOCATOR& valueOrAllocator)
8775: Imp(valueOrAllocator)
8779template <
class A1,
class A2,
class A3,
class A4>
8780template <
class TYPE>
8782Variant4<A1, A2, A3, A4>::
8784: Imp(value, basicAllocator)
8788template <
class A1,
class A2,
class A3,
class A4>
8789template <
class TYPE>
8791Variant4<A1, A2, A3, A4>::
8792#if defined(BSLMF_MOVABLEREF_USES_RVALUE_REFERENCES)
8793Variant4(TYPE&& value,
8804Variant4(
bslmf::MovableRef<TYPE> value)
8805: Imp(MoveUtil::move(value))
8810template <
class A1,
class A2,
class A3,
class A4>
8811template <
class TYPE>
8813Variant4<A1, A2, A3, A4>::
8814#if defined(BSLMF_MOVABLEREF_USES_RVALUE_REFERENCES)
8815Variant4(TYPE&& value,
8824Variant4(
bslmf::MovableRef<TYPE> value,
8825 bslma::Allocator *basicAllocator)
8826: Imp(MoveUtil::move(value), basicAllocator)
8831template <
class A1,
class A2,
class A3,
class A4>
8833Variant4<A1, A2, A3, A4>::
8835: Imp(static_cast<const Imp&>(original), basicAllocator)
8839template <
class A1,
class A2,
class A3,
class A4>
8841Variant4<A1, A2, A3, A4>::
8843: Imp(MoveUtil::move(static_cast<Imp&>(MoveUtil::access(original))))
8847template <
class A1,
class A2,
class A3,
class A4>
8849Variant4<A1, A2, A3, A4>::
8852: Imp(MoveUtil::move(static_cast<Imp&>(MoveUtil::access(original))),
8858template <
class A1,
class A2,
class A3,
class A4>
8859template <
class TYPE>
8861Variant4<A1, A2, A3, A4>&
8862Variant4<A1, A2, A3, A4>::operator=(
const TYPE& value)
8864 Imp::operator=(value);
8868template <
class A1,
class A2,
class A3,
class A4>
8869template <
class TYPE>
8871#if defined(BSLMF_MOVABLEREF_USES_RVALUE_REFERENCES)
8874 typename bsl::remove_cvref<TYPE>::type>::value,
8875Variant4<A1, A2, A3, A4> >::type&
8876Variant4<A1, A2, A3, A4>::operator=(TYPE&& value)
8878Variant4<A1, A2, A3, A4>&
8882#if defined(BSLMF_MOVABLEREF_USES_RVALUE_REFERENCES)
8885 TYPE& lvalue = value;
8886 Imp::operator=(MoveUtil::move(lvalue));
8892template <
class A1,
class A2,
class A3,
class A4>
8894Variant4<A1, A2, A3, A4>&
8895Variant4<A1, A2, A3, A4>::operator=(
const Variant4& rhs)
8897 Imp::operator=(
static_cast<const Imp&
>(rhs));
8901template <
class A1,
class A2,
class A3,
class A4>
8903Variant4<A1, A2, A3, A4>&
8906 Variant4& lvalue =
rhs;
8908 Imp::operator=(MoveUtil::move(
static_cast<Imp&
>(lvalue)));
8917template <
class A1,
class A2,
class A3,
class A4,
class A5>
8919Variant5<A1, A2, A3, A4, A5>::Variant5()
8923template <
class A1,
class A2,
class A3,
class A4,
class A5>
8924template <
class TYPE_OR_ALLOCATOR>
8926Variant5<A1, A2, A3, A4, A5>::
8927Variant5(
const TYPE_OR_ALLOCATOR& valueOrAllocator)
8928: Imp(valueOrAllocator)
8932template <
class A1,
class A2,
class A3,
class A4,
class A5>
8933template <
class TYPE>
8935Variant5<A1, A2, A3, A4, A5>::
8937: Imp(value, basicAllocator)
8941template <
class A1,
class A2,
class A3,
class A4,
class A5>
8942template <
class TYPE>
8944Variant5<A1, A2, A3, A4, A5>::
8945#if defined(BSLMF_MOVABLEREF_USES_RVALUE_REFERENCES)
8946Variant5(TYPE&& value,
8957Variant5(
bslmf::MovableRef<TYPE> value)
8958: Imp(MoveUtil::move(value))
8963template <
class A1,
class A2,
class A3,
class A4,
class A5>
8964template <
class TYPE>
8966Variant5<A1, A2, A3, A4, A5>::
8967#if defined(BSLMF_MOVABLEREF_USES_RVALUE_REFERENCES)
8968Variant5(TYPE&& value,
8977Variant5(
bslmf::MovableRef<TYPE> value,
8978 bslma::Allocator *basicAllocator)
8979: Imp(MoveUtil::move(value), basicAllocator)
8984template <
class A1,
class A2,
class A3,
class A4,
class A5>
8986Variant5<A1, A2, A3, A4, A5>::
8988: Imp(static_cast<const Imp&>(original), basicAllocator)
8992template <
class A1,
class A2,
class A3,
class A4,
class A5>
8994Variant5<A1, A2, A3, A4, A5>::
8996: Imp(MoveUtil::move(static_cast<Imp&>(MoveUtil::access(original))))
9000template <
class A1,
class A2,
class A3,
class A4,
class A5>
9002Variant5<A1, A2, A3, A4, A5>::
9005: Imp(MoveUtil::move(static_cast<Imp&>(MoveUtil::access(original))),
9011template <
class A1,
class A2,
class A3,
class A4,
class A5>
9012template <
class TYPE>
9014Variant5<A1, A2, A3, A4, A5>&
9015Variant5<A1, A2, A3, A4, A5>::operator=(
const TYPE& value)
9017 Imp::operator=(value);
9021template <
class A1,
class A2,
class A3,
class A4,
class A5>
9022template <
class TYPE>
9024#if defined(BSLMF_MOVABLEREF_USES_RVALUE_REFERENCES)
9027 typename bsl::remove_cvref<TYPE>::type>::value,
9028Variant5<A1, A2, A3, A4, A5> >::type&
9029Variant5<A1, A2, A3, A4, A5>::operator=(TYPE&& value)
9031Variant5<A1, A2, A3, A4, A5>&
9035#if defined(BSLMF_MOVABLEREF_USES_RVALUE_REFERENCES)
9038 TYPE& lvalue = value;
9039 Imp::operator=(MoveUtil::move(lvalue));
9045template <
class A1,
class A2,
class A3,
class A4,
class A5>
9047Variant5<A1, A2, A3, A4, A5>&
9048Variant5<A1, A2, A3, A4, A5>::operator=(
const Variant5& rhs)
9050 Imp::operator=(
static_cast<const Imp&
>(rhs));
9054template <
class A1,
class A2,
class A3,
class A4,
class A5>
9056Variant5<A1, A2, A3, A4, A5>&
9059 Variant5& lvalue =
rhs;
9061 Imp::operator=(MoveUtil::move(
static_cast<Imp&
>(lvalue)));
9070template <
class A1,
class A2,
class A3,
class A4,
class A5,
class A6>
9072Variant6<A1, A2, A3, A4, A5, A6>::Variant6()
9076template <
class A1,
class A2,
class A3,
class A4,
class A5,
class A6>
9077template <
class TYPE_OR_ALLOCATOR>
9079Variant6<A1, A2, A3, A4, A5, A6>::
9080Variant6(
const TYPE_OR_ALLOCATOR& valueOrAllocator)
9081: Imp(valueOrAllocator)
9085template <
class A1,
class A2,
class A3,
class A4,
class A5,
class A6>
9086template <
class TYPE>
9088Variant6<A1, A2, A3, A4, A5, A6>::
9090: Imp(value, basicAllocator)
9094template <
class A1,
class A2,
class A3,
class A4,
class A5,
class A6>
9095template <
class TYPE>
9097Variant6<A1, A2, A3, A4, A5, A6>::
9098#if defined(BSLMF_MOVABLEREF_USES_RVALUE_REFERENCES)
9099Variant6(TYPE&& value,
9110Variant6(
bslmf::MovableRef<TYPE> value)
9111: Imp(MoveUtil::move(value))
9116template <
class A1,
class A2,
class A3,
class A4,
class A5,
class A6>
9117template <
class TYPE>
9119Variant6<A1, A2, A3, A4, A5, A6>::
9120#if defined(BSLMF_MOVABLEREF_USES_RVALUE_REFERENCES)
9121Variant6(TYPE&& value,
9130Variant6(
bslmf::MovableRef<TYPE> value,
9131 bslma::Allocator *basicAllocator)
9132: Imp(MoveUtil::move(value), basicAllocator)
9137template <
class A1,
class A2,
class A3,
class A4,
class A5,
class A6>
9139Variant6<A1, A2, A3, A4, A5, A6>::
9141: Imp(static_cast<const Imp&>(original), basicAllocator)
9145template <
class A1,
class A2,
class A3,
class A4,
class A5,
class A6>
9147Variant6<A1, A2, A3, A4, A5, A6>::
9149: Imp(MoveUtil::move(static_cast<Imp&>(MoveUtil::access(original))))
9153template <
class A1,
class A2,
class A3,
class A4,
class A5,
class A6>
9155Variant6<A1, A2, A3, A4, A5, A6>::
9158: Imp(MoveUtil::move(static_cast<Imp&>(MoveUtil::access(original))),
9164template <
class A1,
class A2,
class A3,
class A4,
class A5,
class A6>
9165template <
class TYPE>
9167Variant6<A1, A2, A3, A4, A5, A6>&
9168Variant6<A1, A2, A3, A4, A5, A6>::operator=(
const TYPE& value)
9170 Imp::operator=(value);
9174template <
class A1,
class A2,
class A3,
class A4,
class A5,
class A6>
9175template <
class TYPE>
9177#if defined(BSLMF_MOVABLEREF_USES_RVALUE_REFERENCES)
9180 typename bsl::remove_cvref<TYPE>::type>::value,
9181Variant6<A1, A2, A3, A4, A5, A6> >::type&
9182Variant6<A1, A2, A3, A4, A5, A6>::operator=(TYPE&& value)
9184Variant6<A1, A2, A3, A4, A5, A6>&
9188#if defined(BSLMF_MOVABLEREF_USES_RVALUE_REFERENCES)
9191 TYPE& lvalue = value;
9192 Imp::operator=(MoveUtil::move(lvalue));
9198template <
class A1,
class A2,
class A3,
class A4,
class A5,
class A6>
9200Variant6<A1, A2, A3, A4, A5, A6>&
9201Variant6<A1, A2, A3, A4, A5, A6>::operator=(
const Variant6& rhs)
9203 Imp::operator=(
static_cast<const Imp&
>(rhs));
9207template <
class A1,
class A2,
class A3,
class A4,
class A5,
class A6>
9209Variant6<A1, A2, A3, A4, A5, A6>&
9212 Variant6& lvalue =
rhs;
9214 Imp::operator=(MoveUtil::move(
static_cast<Imp&
>(lvalue)));
9223template <
class A1,
class A2,
class A3,
class A4,
class A5,
class A6,
class A7>
9225Variant7<A1, A2, A3, A4, A5, A6, A7>::Variant7()
9229template <
class A1,
class A2,
class A3,
class A4,
class A5,
class A6,
class A7>
9230template <
class TYPE_OR_ALLOCATOR>
9232Variant7<A1, A2, A3, A4, A5, A6, A7>::
9233Variant7(
const TYPE_OR_ALLOCATOR& valueOrAllocator)
9234: Imp(valueOrAllocator)
9238template <
class A1,
class A2,
class A3,
class A4,
class A5,
class A6,
class A7>
9239template <
class TYPE>
9241Variant7<A1, A2, A3, A4, A5, A6, A7>::
9243: Imp(value, basicAllocator)
9247template <
class A1,
class A2,
class A3,
class A4,
class A5,
class A6,
class A7>
9248template <
class TYPE>
9250Variant7<A1, A2, A3, A4, A5, A6, A7>::
9251#if defined(BSLMF_MOVABLEREF_USES_RVALUE_REFERENCES)
9252Variant7(TYPE&& value,
9263Variant7(
bslmf::MovableRef<TYPE> value)
9264: Imp(MoveUtil::move(value))
9269template <
class A1,
class A2,
class A3,
class A4,
class A5,
class A6,
class A7>
9270template <
class TYPE>
9272Variant7<A1, A2, A3, A4, A5, A6, A7>::
9273#if defined(BSLMF_MOVABLEREF_USES_RVALUE_REFERENCES)
9274Variant7(TYPE&& value,
9283Variant7(
bslmf::MovableRef<TYPE> value,
9284 bslma::Allocator *basicAllocator)
9285: Imp(MoveUtil::move(value), basicAllocator)
9290template <
class A1,
class A2,
class A3,
class A4,
class A5,
class A6,
class A7>
9292Variant7<A1, A2, A3, A4, A5, A6, A7>::
9294: Imp(static_cast<const Imp&>(original), basicAllocator)
9298template <
class A1,
class A2,
class A3,
class A4,
class A5,
class A6,
class A7>
9300Variant7<A1, A2, A3, A4, A5, A6, A7>::
9302: Imp(MoveUtil::move(static_cast<Imp&>(MoveUtil::access(original))))
9306template <
class A1,
class A2,
class A3,
class A4,
class A5,
class A6,
class A7>
9308Variant7<A1, A2, A3, A4, A5, A6, A7>::
9311: Imp(MoveUtil::move(static_cast<Imp&>(MoveUtil::access(original))),
9317template <
class A1,
class A2,
class A3,
class A4,
class A5,
class A6,
class A7>
9318template <
class TYPE>
9320Variant7<A1, A2, A3, A4, A5, A6, A7>&
9321Variant7<A1, A2, A3, A4, A5, A6, A7>::operator=(
const TYPE& value)
9323 Imp::operator=(value);
9327template <
class A1,
class A2,
class A3,
class A4,
class A5,
class A6,
class A7>
9328template <
class TYPE>
9330#if defined(BSLMF_MOVABLEREF_USES_RVALUE_REFERENCES)
9333 typename bsl::remove_cvref<TYPE>::type>::value,
9334Variant7<A1, A2, A3, A4, A5, A6, A7> >::type&
9335Variant7<A1, A2, A3, A4, A5, A6, A7>::operator=(TYPE&& value)
9337Variant7<A1, A2, A3, A4, A5, A6, A7>&
9341#if defined(BSLMF_MOVABLEREF_USES_RVALUE_REFERENCES)
9344 TYPE& lvalue = value;
9345 Imp::operator=(MoveUtil::move(lvalue));
9351template <
class A1,
class A2,
class A3,
class A4,
class A5,
class A6,
class A7>
9353Variant7<A1, A2, A3, A4, A5, A6, A7>&
9354Variant7<A1, A2, A3, A4, A5, A6, A7>::
9355operator=(
const Variant7& rhs)
9357 Imp::operator=(
static_cast<const Imp&
>(rhs));
9361template <
class A1,
class A2,
class A3,
class A4,
class A5,
class A6,
class A7>
9363Variant7<A1, A2, A3, A4, A5, A6, A7>&
9364Variant7<A1, A2, A3, A4, A5, A6, A7>::
9367 Variant7& lvalue =
rhs;
9369 Imp::operator=(MoveUtil::move(
static_cast<Imp&
>(lvalue)));
9378template <
class A1,
class A2,
class A3,
class A4,
class A5,
class A6,
class A7,
9381Variant8<A1, A2, A3, A4, A5, A6, A7, A8>::Variant8()
9385template <
class A1,
class A2,
class A3,
class A4,
class A5,
class A6,
class A7,
9387template <
class TYPE_OR_ALLOCATOR>
9389Variant8<A1, A2, A3, A4, A5, A6, A7, A8>::
9390Variant8(
const TYPE_OR_ALLOCATOR& valueOrAllocator)
9391: Imp(valueOrAllocator)
9395template <
class A1,
class A2,
class A3,
class A4,
class A5,
class A6,
class A7,
9397template <
class TYPE>
9399Variant8<A1, A2, A3, A4, A5, A6, A7, A8>::
9401: Imp(value, basicAllocator)
9405template <
class A1,
class A2,
class A3,
class A4,
class A5,
class A6,
class A7,
9407template <
class TYPE>
9409Variant8<A1, A2, A3, A4, A5, A6, A7, A8>::
9410#if defined(BSLMF_MOVABLEREF_USES_RVALUE_REFERENCES)
9411Variant8(TYPE&& value,
9422Variant8(
bslmf::MovableRef<TYPE> value)
9423: Imp(MoveUtil::move(value))
9428template <
class A1,
class A2,
class A3,
class A4,
class A5,
class A6,
class A7,
9430template <
class TYPE>
9432Variant8<A1, A2, A3, A4, A5, A6, A7, A8>::
9433#if defined(BSLMF_MOVABLEREF_USES_RVALUE_REFERENCES)
9434Variant8(TYPE&& value,
9443Variant8(
bslmf::MovableRef<TYPE> value,
9444 bslma::Allocator *basicAllocator)
9445: Imp(MoveUtil::move(value), basicAllocator)
9450template <
class A1,
class A2,
class A3,
class A4,
class A5,
class A6,
class A7,
9453Variant8<A1, A2, A3, A4, A5, A6, A7, A8>::
9455: Imp(static_cast<const Imp&>(original), basicAllocator)
9459template <
class A1,
class A2,
class A3,
class A4,
class A5,
class A6,
class A7,
9462Variant8<A1, A2, A3, A4, A5, A6, A7, A8>::
9464: Imp(MoveUtil::move(static_cast<Imp&>(MoveUtil::access(original))))
9468template <
class A1,
class A2,
class A3,
class A4,
class A5,
class A6,
class A7,
9471Variant8<A1, A2, A3, A4, A5, A6, A7, A8>::
9474: Imp(MoveUtil::move(static_cast<Imp&>(MoveUtil::access(original))),
9480template <
class A1,
class A2,
class A3,
class A4,
class A5,
class A6,
class A7,
9482template <
class TYPE>
9484Variant8<A1, A2, A3, A4, A5, A6, A7, A8>&
9485Variant8<A1, A2, A3, A4, A5, A6, A7, A8>::operator=(
const TYPE& value)
9487 Imp::operator=(value);
9491template <
class A1,
class A2,
class A3,
class A4,
class A5,
class A6,
class A7,
9493template <
class TYPE>
9495#if defined(BSLMF_MOVABLEREF_USES_RVALUE_REFERENCES)
9498 typename bsl::remove_cvref<TYPE>::type>::value,
9499Variant8<A1, A2, A3, A4, A5, A6, A7, A8> >::type&
9500Variant8<A1, A2, A3, A4, A5, A6, A7, A8>::
9501operator=(TYPE&& value)
9503Variant8<A1, A2, A3, A4, A5, A6, A7, A8>&
9504Variant8<A1, A2, A3, A4, A5, A6, A7, A8>::
9508#if defined(BSLMF_MOVABLEREF_USES_RVALUE_REFERENCES)
9511 TYPE& lvalue = value;
9512 Imp::operator=(MoveUtil::move(lvalue));
9518template <
class A1,
class A2,
class A3,
class A4,
class A5,
class A6,
class A7,
9521Variant8<A1, A2, A3, A4, A5, A6, A7, A8>&
9522Variant8<A1, A2, A3, A4, A5, A6, A7, A8>::
9523operator=(
const Variant8& rhs)
9525 Imp::operator=(
static_cast<const Imp&
>(rhs));
9529template <
class A1,
class A2,
class A3,
class A4,
class A5,
class A6,
class A7,
9532Variant8<A1, A2, A3, A4, A5, A6, A7, A8>&
9533Variant8<A1, A2, A3, A4, A5, A6, A7, A8>::
9536 Variant8& lvalue =
rhs;
9538 Imp::operator=(MoveUtil::move(
static_cast<Imp&
>(lvalue)));
9547template <
class A1,
class A2,
class A3,
class A4,
class A5,
class A6,
class A7,
9550Variant9<A1, A2, A3, A4, A5, A6, A7, A8, A9>::Variant9()
9554template <
class A1,
class A2,
class A3,
class A4,
class A5,
class A6,
class A7,
9556template <
class TYPE_OR_ALLOCATOR>
9558Variant9<A1, A2, A3, A4, A5, A6, A7, A8, A9>::
9559Variant9(
const TYPE_OR_ALLOCATOR& valueOrAllocator)
9560: Imp(valueOrAllocator)
9564template <
class A1,
class A2,
class A3,
class A4,
class A5,
class A6,
class A7,
9566template <
class TYPE>
9568Variant9<A1, A2, A3, A4, A5, A6, A7, A8, A9>::
9570: Imp(value, basicAllocator)
9574template <
class A1,
class A2,
class A3,
class A4,
class A5,
class A6,
class A7,
9576template <
class TYPE>
9578Variant9<A1, A2, A3, A4, A5, A6, A7, A8, A9>::
9579#if defined(BSLMF_MOVABLEREF_USES_RVALUE_REFERENCES)
9580Variant9(TYPE&& value,
9591Variant9(
bslmf::MovableRef<TYPE> value)
9592: Imp(MoveUtil::move(value))
9597template <
class A1,
class A2,
class A3,
class A4,
class A5,
class A6,
class A7,
9599template <
class TYPE>
9601Variant9<A1, A2, A3, A4, A5, A6, A7, A8, A9>::
9602#if defined(BSLMF_MOVABLEREF_USES_RVALUE_REFERENCES)
9603Variant9(TYPE&& value,
9612Variant9(
bslmf::MovableRef<TYPE> value,
9613 bslma::Allocator *basicAllocator)
9614: Imp(MoveUtil::move(value), basicAllocator)
9619template <
class A1,
class A2,
class A3,
class A4,
class A5,
class A6,
class A7,
9622Variant9<A1, A2, A3, A4, A5, A6, A7, A8, A9>::
9624: Imp(static_cast<const Imp&>(original), basicAllocator)
9628template <
class A1,
class A2,
class A3,
class A4,
class A5,
class A6,
class A7,
9631Variant9<A1, A2, A3, A4, A5, A6, A7, A8, A9>::
9633: Imp(MoveUtil::move(static_cast<Imp&>(MoveUtil::access(original))))
9637template <
class A1,
class A2,
class A3,
class A4,
class A5,
class A6,
class A7,
9640Variant9<A1, A2, A3, A4, A5, A6, A7, A8, A9>::
9643: Imp(MoveUtil::move(static_cast<Imp&>(MoveUtil::access(original))),
9649template <
class A1,
class A2,
class A3,
class A4,
class A5,
class A6,
class A7,
9651template <
class TYPE>
9653Variant9<A1, A2, A3, A4, A5, A6, A7, A8, A9>&
9654Variant9<A1, A2, A3, A4, A5, A6, A7, A8, A9>::
9655operator=(
const TYPE& value)
9657 Imp::operator=(value);
9661template <
class A1,
class A2,
class A3,
class A4,
class A5,
class A6,
class A7,
9663template <
class TYPE>
9665#if defined(BSLMF_MOVABLEREF_USES_RVALUE_REFERENCES)
9668 typename bsl::remove_cvref<TYPE>::type>::value,
9669Variant9<A1, A2, A3, A4, A5, A6, A7, A8, A9> >::type&
9670Variant9<A1, A2, A3, A4, A5, A6, A7, A8, A9>::
9671operator=(TYPE&& value)
9673Variant9<A1, A2, A3, A4, A5, A6, A7, A8, A9>&
9674Variant9<A1, A2, A3, A4, A5, A6, A7, A8, A9>::
9678#if defined(BSLMF_MOVABLEREF_USES_RVALUE_REFERENCES)
9681 TYPE& lvalue = value;
9682 Imp::operator=(MoveUtil::move(lvalue));
9688template <
class A1,
class A2,
class A3,
class A4,
class A5,
class A6,
class A7,
9691Variant9<A1, A2, A3, A4, A5, A6, A7, A8, A9>&
9692Variant9<A1, A2, A3, A4, A5, A6, A7, A8, A9>::
9693operator=(
const Variant9& rhs)
9695 Imp::operator=(
static_cast<const Imp&
>(rhs));
9699template <
class A1,
class A2,
class A3,
class A4,
class A5,
class A6,
class A7,
9702Variant9<A1, A2, A3, A4, A5, A6, A7, A8, A9>&
9703Variant9<A1, A2, A3, A4, A5, A6, A7, A8, A9>::
9706 Variant9& lvalue =
rhs;
9708 Imp::operator=(MoveUtil::move(
static_cast<Imp&
>(lvalue)));
9717template <
class A1,
class A2,
class A3,
class A4,
class A5,
class A6,
class A7,
9718 class A8,
class A9,
class A10>
9720Variant10<A1, A2, A3, A4, A5, A6, A7, A8, A9, A10>::Variant10()
9724template <
class A1,
class A2,
class A3,
class A4,
class A5,
class A6,
class A7,
9725 class A8,
class A9,
class A10>
9726template <
class TYPE_OR_ALLOCATOR>
9728Variant10<A1, A2, A3, A4, A5, A6, A7, A8, A9, A10>::
9729Variant10(
const TYPE_OR_ALLOCATOR& valueOrAllocator)
9730: Imp(valueOrAllocator)
9734template <
class A1,
class A2,
class A3,
class A4,
class A5,
class A6,
class A7,
9735 class A8,
class A9,
class A10>
9736template <
class TYPE>
9738Variant10<A1, A2, A3, A4, A5, A6, A7, A8, A9, A10>::
9740: Imp(value, basicAllocator)
9744template <
class A1,
class A2,
class A3,
class A4,
class A5,
class A6,
class A7,
9745 class A8,
class A9,
class A10>
9746template <
class TYPE>
9748Variant10<A1, A2, A3, A4, A5, A6, A7, A8, A9, A10>::
9749#if defined(BSLMF_MOVABLEREF_USES_RVALUE_REFERENCES)
9750Variant10(TYPE&& value,
9761Variant10(
bslmf::MovableRef<TYPE> value)
9762: Imp(MoveUtil::move(value))
9767template <
class A1,
class A2,
class A3,
class A4,
class A5,
class A6,
class A7,
9768 class A8,
class A9,
class A10>
9769template <
class TYPE>
9771Variant10<A1, A2, A3, A4, A5, A6, A7, A8, A9, A10>::
9772#if defined(BSLMF_MOVABLEREF_USES_RVALUE_REFERENCES)
9773Variant10(TYPE&& value,
9782Variant10(
bslmf::MovableRef<TYPE> value,
9783 bslma::Allocator *basicAllocator)
9784: Imp(MoveUtil::move(value), basicAllocator)
9789template <
class A1,
class A2,
class A3,
class A4,
class A5,
class A6,
class A7,
9790 class A8,
class A9,
class A10>
9792Variant10<A1, A2, A3, A4, A5, A6, A7, A8, A9, A10>::
9794: Imp(static_cast<const Imp&>(original), basicAllocator)
9798template <
class A1,
class A2,
class A3,
class A4,
class A5,
class A6,
class A7,
9799 class A8,
class A9,
class A10>
9801Variant10<A1, A2, A3, A4, A5, A6, A7, A8, A9, A10>::
9803: Imp(MoveUtil::move(static_cast<Imp&>(MoveUtil::access(original))))
9807template <
class A1,
class A2,
class A3,
class A4,
class A5,
class A6,
class A7,
9808 class A8,
class A9,
class A10>
9810Variant10<A1, A2, A3, A4, A5, A6, A7, A8, A9, A10>::
9813: Imp(MoveUtil::move(static_cast<Imp&>(MoveUtil::access(original))),
9819template <
class A1,
class A2,
class A3,
class A4,
class A5,
class A6,
class A7,
9820 class A8,
class A9,
class A10>
9821template <
class TYPE>
9823Variant10<A1, A2, A3, A4, A5, A6, A7, A8, A9, A10>&
9824Variant10<A1, A2, A3, A4, A5, A6, A7, A8, A9, A10>::
9825operator=(
const TYPE& value)
9827 Imp::operator=(value);
9831template <
class A1,
class A2,
class A3,
class A4,
class A5,
class A6,
class A7,
9832 class A8,
class A9,
class A10>
9833template <
class TYPE>
9835#if defined(BSLMF_MOVABLEREF_USES_RVALUE_REFERENCES)
9837 !
bsl::is_same<Variant10<A1, A2, A3, A4, A5, A6, A7, A8, A9, A10>,
9838 typename bsl::remove_cvref<TYPE>::type>::value,
9839Variant10<A1, A2, A3, A4, A5, A6, A7, A8, A9, A10> >::type&
9840Variant10<A1, A2, A3, A4, A5, A6, A7, A8, A9, A10>::
9841operator=(TYPE&& value)
9843Variant10<A1, A2, A3, A4, A5, A6, A7, A8, A9, A10>&
9844Variant10<A1, A2, A3, A4, A5, A6, A7, A8, A9, A10>::
9848#if defined(BSLMF_MOVABLEREF_USES_RVALUE_REFERENCES)
9851 TYPE& lvalue = value;
9852 Imp::operator=(MoveUtil::move(lvalue));
9858template <
class A1,
class A2,
class A3,
class A4,
class A5,
class A6,
class A7,
9859 class A8,
class A9,
class A10>
9861Variant10<A1, A2, A3, A4, A5, A6, A7, A8, A9, A10>&
9862Variant10<A1, A2, A3, A4, A5, A6, A7, A8, A9, A10>::
9863operator=(
const Variant10& rhs)
9865 Imp::operator=(
static_cast<const Imp&
>(rhs));
9869template <
class A1,
class A2,
class A3,
class A4,
class A5,
class A6,
class A7,
9870 class A8,
class A9,
class A10>
9872Variant10<A1, A2, A3, A4, A5, A6, A7, A8, A9, A10>&
9873Variant10<A1, A2, A3, A4, A5, A6, A7, A8, A9, A10>::
9876 Variant10& lvalue =
rhs;
9878 Imp::operator=(MoveUtil::move(
static_cast<Imp&
>(lvalue)));
9887template <
class A1,
class A2,
class A3,
class A4,
class A5,
class A6,
9888 class A7,
class A8,
class A9,
class A10,
class A11>
9890Variant11<A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11>::
9895template <
class A1,
class A2,
class A3,
class A4,
class A5,
class A6,
9896 class A7,
class A8,
class A9,
class A10,
class A11>
9897template <
class TYPE_OR_ALLOCATOR>
9899Variant11<A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11>::
9900Variant11(
const TYPE_OR_ALLOCATOR& valueOrAllocator)
9901: Imp(valueOrAllocator)
9905template <
class A1,
class A2,
class A3,
class A4,
class A5,
class A6,
9906 class A7,
class A8,
class A9,
class A10,
class A11>
9907template <
class TYPE>
9909Variant11<A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11>::
9911: Imp(value, basicAllocator)
9915template <
class A1,
class A2,
class A3,
class A4,
class A5,
class A6,
9916 class A7,
class A8,
class A9,
class A10,
class A11>
9917template <
class TYPE>
9919Variant11<A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11>::
9920#if defined(BSLMF_MOVABLEREF_USES_RVALUE_REFERENCES)
9921Variant11(TYPE&& value,
9932Variant11(
bslmf::MovableRef<TYPE> value)
9933: Imp(MoveUtil::move(value))
9938template <
class A1,
class A2,
class A3,
class A4,
class A5,
class A6,
9939 class A7,
class A8,
class A9,
class A10,
class A11>
9940template <
class TYPE>
9942Variant11<A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11>::
9943#if defined(BSLMF_MOVABLEREF_USES_RVALUE_REFERENCES)
9944Variant11(TYPE&& value,
9953Variant11(
bslmf::MovableRef<TYPE> value,
9954 bslma::Allocator *basicAllocator)
9955: Imp(MoveUtil::move(value), basicAllocator)
9960template <
class A1,
class A2,
class A3,
class A4,
class A5,
class A6,
9961 class A7,
class A8,
class A9,
class A10,
class A11>
9963Variant11<A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11>::
9965: Imp(static_cast<const Imp&>(original), basicAllocator)
9969template <
class A1,
class A2,
class A3,
class A4,
class A5,
class A6,
9970 class A7,
class A8,
class A9,
class A10,
class A11>
9972Variant11<A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11>::
9974: Imp(MoveUtil::move(static_cast<Imp&>(MoveUtil::access(original))))
9978template <
class A1,
class A2,
class A3,
class A4,
class A5,
class A6,
9979 class A7,
class A8,
class A9,
class A10,
class A11>
9981Variant11<A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11>::
9984: Imp(MoveUtil::move(static_cast<Imp&>(MoveUtil::access(original))),
9990template <
class A1,
class A2,
class A3,
class A4,
class A5,
class A6,
9991 class A7,
class A8,
class A9,
class A10,
class A11>
9992template <
class TYPE>
9994Variant11<A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11>&
9995Variant11<A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11>::
9996operator=(
const TYPE& value)
9998 Imp::operator=(value);
10002template <
class A1,
class A2,
class A3,
class A4,
class A5,
class A6,
10003 class A7,
class A8,
class A9,
class A10,
class A11>
10004template <
class TYPE>
10006#if defined(BSLMF_MOVABLEREF_USES_RVALUE_REFERENCES)
10008 !
bsl::is_same<Variant11<A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11>,
10009 typename bsl::remove_cvref<TYPE>::type>::value,
10010Variant11<A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11> >::type&
10011Variant11<A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11>::
10012operator=(TYPE&& value)
10014Variant11<A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11>&
10015Variant11<A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11>::
10019#if defined(BSLMF_MOVABLEREF_USES_RVALUE_REFERENCES)
10022 TYPE& lvalue = value;
10023 Imp::operator=(MoveUtil::move(lvalue));
10029template <
class A1,
class A2,
class A3,
class A4,
class A5,
class A6,
10030 class A7,
class A8,
class A9,
class A10,
class A11>
10032Variant11<A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11>&
10033Variant11<A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11>::
10034operator=(
const Variant11& rhs)
10036 Imp::operator=(
static_cast<const Imp&
>(rhs));
10040template <
class A1,
class A2,
class A3,
class A4,
class A5,
class A6,
10041 class A7,
class A8,
class A9,
class A10,
class A11>
10043Variant11<A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11>&
10044Variant11<A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11>::
10047 Variant11& lvalue =
rhs;
10049 Imp::operator=(MoveUtil::move(
static_cast<Imp&
>(lvalue)));
10058template <
class A1,
class A2,
class A3,
class A4,
class A5,
class A6,
10059 class A7,
class A8,
class A9,
class A10,
class A11,
class A12>
10061Variant12<A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12>::
10066template <
class A1,
class A2,
class A3,
class A4,
class A5,
class A6,
10067 class A7,
class A8,
class A9,
class A10,
class A11,
class A12>
10068template <
class TYPE_OR_ALLOCATOR>
10070Variant12<A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12>::
10071Variant12(
const TYPE_OR_ALLOCATOR& valueOrAllocator)
10072: Imp(valueOrAllocator)
10076template <
class A1,
class A2,
class A3,
class A4,
class A5,
class A6,
10077 class A7,
class A8,
class A9,
class A10,
class A11,
class A12>
10078template <
class TYPE>
10080Variant12<A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12>::
10082: Imp(value, basicAllocator)
10086template <
class A1,
class A2,
class A3,
class A4,
class A5,
class A6,
10087 class A7,
class A8,
class A9,
class A10,
class A11,
class A12>
10088template <
class TYPE>
10090Variant12<A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12>::
10091#if defined(BSLMF_MOVABLEREF_USES_RVALUE_REFERENCES)
10092Variant12(TYPE&& value,
10103Variant12(
bslmf::MovableRef<TYPE> value)
10104: Imp(MoveUtil::move(value))
10109template <
class A1,
class A2,
class A3,
class A4,
class A5,
class A6,
10110 class A7,
class A8,
class A9,
class A10,
class A11,
class A12>
10111template <
class TYPE>
10113Variant12<A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12>::
10114#if defined(BSLMF_MOVABLEREF_USES_RVALUE_REFERENCES)
10115Variant12(TYPE&& value,
10124Variant12(
bslmf::MovableRef<TYPE> value,
10125 bslma::Allocator *basicAllocator)
10126: Imp(MoveUtil::move(value), basicAllocator)
10131template <
class A1,
class A2,
class A3,
class A4,
class A5,
class A6,
10132 class A7,
class A8,
class A9,
class A10,
class A11,
class A12>
10134Variant12<A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12>::
10136: Imp(static_cast<const Imp&>(original), basicAllocator)
10140template <
class A1,
class A2,
class A3,
class A4,
class A5,
class A6,
10141 class A7,
class A8,
class A9,
class A10,
class A11,
class A12>
10143Variant12<A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12>::
10145: Imp(MoveUtil::move(static_cast<Imp&>(MoveUtil::access(original))))
10149template <
class A1,
class A2,
class A3,
class A4,
class A5,
class A6,
10150 class A7,
class A8,
class A9,
class A10,
class A11,
class A12>
10152Variant12<A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12>::
10155: Imp(MoveUtil::move(static_cast<Imp&>(MoveUtil::access(original))),
10161template <
class A1,
class A2,
class A3,
class A4,
class A5,
class A6,
10162 class A7,
class A8,
class A9,
class A10,
class A11,
class A12>
10163template <
class TYPE>
10165Variant12<A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12>&
10166Variant12<A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12>::
10167operator=(
const TYPE& value)
10169 Imp::operator=(value);
10173template <
class A1,
class A2,
class A3,
class A4,
class A5,
class A6,
10174 class A7,
class A8,
class A9,
class A10,
class A11,
class A12>
10175template <
class TYPE>
10177#if defined(BSLMF_MOVABLEREF_USES_RVALUE_REFERENCES)
10179 !
bsl::is_same<Variant12<A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12>,
10180 typename bsl::remove_cvref<TYPE>::type>::value,
10181Variant12<A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12> >::type&
10182Variant12<A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12>::
10183operator=(TYPE&& value)
10185Variant12<A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12>&
10186Variant12<A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12>::
10190#if defined(BSLMF_MOVABLEREF_USES_RVALUE_REFERENCES)
10193 TYPE& lvalue = value;
10194 Imp::operator=(MoveUtil::move(lvalue));
10200template <
class A1,
class A2,
class A3,
class A4,
class A5,
class A6,
10201 class A7,
class A8,
class A9,
class A10,
class A11,
class A12>
10203Variant12<A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12>&
10204Variant12<A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12>::
10205operator=(
const Variant12& rhs)
10207 Imp::operator=(
static_cast<const Imp&
>(rhs));
10211template <
class A1,
class A2,
class A3,
class A4,
class A5,
class A6,
10212 class A7,
class A8,
class A9,
class A10,
class A11,
class A12>
10214Variant12<A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12>&
10215Variant12<A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12>::
10218 Variant12& lvalue =
rhs;
10220 Imp::operator=(MoveUtil::move(
static_cast<Imp&
>(lvalue)));
10229template <
class A1,
class A2,
class A3,
class A4,
class A5,
class A6,
10230 class A7,
class A8,
class A9,
class A10,
class A11,
class A12,
10233Variant13<A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13>::
10238template <
class A1,
class A2,
class A3,
class A4,
class A5,
class A6,
10239 class A7,
class A8,
class A9,
class A10,
class A11,
class A12,
10241template <
class TYPE_OR_ALLOCATOR>
10243Variant13<A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13>::
10244Variant13(
const TYPE_OR_ALLOCATOR& valueOrAllocator)
10245: Imp(valueOrAllocator)
10249template <
class A1,
class A2,
class A3,
class A4,
class A5,
class A6,
10250 class A7,
class A8,
class A9,
class A10,
class A11,
class A12,
10252template <
class TYPE>
10254Variant13<A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13>::
10256: Imp(value, basicAllocator)
10260template <
class A1,
class A2,
class A3,
class A4,
class A5,
class A6,
10261 class A7,
class A8,
class A9,
class A10,
class A11,
class A12,
10263template <
class TYPE>
10265Variant13<A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13>::
10266#if defined(BSLMF_MOVABLEREF_USES_RVALUE_REFERENCES)
10267Variant13(TYPE&& value,
10278Variant13(
bslmf::MovableRef<TYPE> value)
10279: Imp(MoveUtil::move(value))
10284template <
class A1,
class A2,
class A3,
class A4,
class A5,
class A6,
10285 class A7,
class A8,
class A9,
class A10,
class A11,
class A12,
10287template <
class TYPE>
10289Variant13<A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13>::
10290#if defined(BSLMF_MOVABLEREF_USES_RVALUE_REFERENCES)
10291Variant13(TYPE&& value,
10300Variant13(
bslmf::MovableRef<TYPE> value,
10301 bslma::Allocator *basicAllocator)
10302: Imp(MoveUtil::move(value), basicAllocator)
10307template <
class A1,
class A2,
class A3,
class A4,
class A5,
class A6,
10308 class A7,
class A8,
class A9,
class A10,
class A11,
class A12,
10311Variant13<A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13>::
10313: Imp(static_cast<const Imp&>(original), basicAllocator)
10317template <
class A1,
class A2,
class A3,
class A4,
class A5,
class A6,
10318 class A7,
class A8,
class A9,
class A10,
class A11,
class A12,
10321Variant13<A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13>::
10323: Imp(MoveUtil::move(static_cast<Imp&>(MoveUtil::access(original))))
10327template <
class A1,
class A2,
class A3,
class A4,
class A5,
class A6,
10328 class A7,
class A8,
class A9,
class A10,
class A11,
class A12,
10331Variant13<A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13>::
10334: Imp(MoveUtil::move(static_cast<Imp&>(MoveUtil::access(original))),
10340template <
class A1,
class A2,
class A3,
class A4,
class A5,
class A6,
10341 class A7,
class A8,
class A9,
class A10,
class A11,
class A12,
10343template <
class TYPE>
10345Variant13<A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13>&
10346Variant13<A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13>::
10347operator=(
const TYPE& value)
10349 Imp::operator=(value);
10353template <
class A1,
class A2,
class A3,
class A4,
class A5,
class A6,
10354 class A7,
class A8,
class A9,
class A10,
class A11,
class A12,
10356template <
class TYPE>
10358#if defined(BSLMF_MOVABLEREF_USES_RVALUE_REFERENCES)
10360 !
bsl::is_same<Variant13<A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12,
10362 typename bsl::remove_cvref<TYPE>::type>::value,
10363Variant13<A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13> >::type&
10364Variant13<A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13>::
10365operator=(TYPE&& value)
10367Variant13<A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13>&
10368Variant13<A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13>::
10372#if defined(BSLMF_MOVABLEREF_USES_RVALUE_REFERENCES)
10375 TYPE& lvalue = value;
10376 Imp::operator=(MoveUtil::move(lvalue));
10382template <
class A1,
class A2,
class A3,
class A4,
class A5,
class A6,
10383 class A7,
class A8,
class A9,
class A10,
class A11,
class A12,
10386Variant13<A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13>&
10387Variant13<A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13>::
10388operator=(
const Variant13& rhs)
10390 Imp::operator=(
static_cast<const Imp&
>(rhs));
10394template <
class A1,
class A2,
class A3,
class A4,
class A5,
class A6,
10395 class A7,
class A8,
class A9,
class A10,
class A11,
class A12,
10398Variant13<A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13>&
10399Variant13<A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13>::
10402 Variant13& lvalue =
rhs;
10404 Imp::operator=(MoveUtil::move(
static_cast<Imp&
>(lvalue)));
10413template <
class A1,
class A2,
class A3,
class A4,
class A5,
class A6,
10414 class A7,
class A8,
class A9,
class A10,
class A11,
class A12,
10415 class A13,
class A14>
10417Variant14<A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14>::
10422template <
class A1,
class A2,
class A3,
class A4,
class A5,
class A6,
10423 class A7,
class A8,
class A9,
class A10,
class A11,
class A12,
10424 class A13,
class A14>
10425template <
class TYPE_OR_ALLOCATOR>
10427Variant14<A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14>::
10428Variant14(
const TYPE_OR_ALLOCATOR& valueOrAllocator)
10429: Imp(valueOrAllocator)
10433template <
class A1,
class A2,
class A3,
class A4,
class A5,
class A6,
10434 class A7,
class A8,
class A9,
class A10,
class A11,
class A12,
10435 class A13,
class A14>
10436template <
class TYPE>
10438Variant14<A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14>::
10440: Imp(value, basicAllocator)
10444template <
class A1,
class A2,
class A3,
class A4,
class A5,
class A6,
10445 class A7,
class A8,
class A9,
class A10,
class A11,
class A12,
10446 class A13,
class A14>
10447template <
class TYPE>
10449Variant14<A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14>::
10450#if defined(BSLMF_MOVABLEREF_USES_RVALUE_REFERENCES)
10451Variant14(TYPE&& value,
10462Variant14(
bslmf::MovableRef<TYPE> value)
10463: Imp(MoveUtil::move(value))
10468template <
class A1,
class A2,
class A3,
class A4,
class A5,
class A6,
10469 class A7,
class A8,
class A9,
class A10,
class A11,
class A12,
10470 class A13,
class A14>
10471template <
class TYPE>
10473Variant14<A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14>::
10474#if defined(BSLMF_MOVABLEREF_USES_RVALUE_REFERENCES)
10475Variant14(TYPE&& value,
10484Variant14(
bslmf::MovableRef<TYPE> value,
10485 bslma::Allocator *basicAllocator)
10486: Imp(MoveUtil::move(value), basicAllocator)
10491template <
class A1,
class A2,
class A3,
class A4,
class A5,
class A6,
10492 class A7,
class A8,
class A9,
class A10,
class A11,
class A12,
10493 class A13,
class A14>
10495Variant14<A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14>::
10497: Imp(static_cast<const Imp&>(original), basicAllocator)
10501template <
class A1,
class A2,
class A3,
class A4,
class A5,
class A6,
10502 class A7,
class A8,
class A9,
class A10,
class A11,
class A12,
10503 class A13,
class A14>
10505Variant14<A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14>::
10507: Imp(MoveUtil::move(static_cast<Imp&>(MoveUtil::access(original))))
10511template <
class A1,
class A2,
class A3,
class A4,
class A5,
class A6,
10512 class A7,
class A8,
class A9,
class A10,
class A11,
class A12,
10513 class A13,
class A14>
10515Variant14<A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14>::
10518: Imp(MoveUtil::move(static_cast<Imp&>(MoveUtil::access(original))),
10524template <
class A1,
class A2,
class A3,
class A4,
class A5,
class A6,
10525 class A7,
class A8,
class A9,
class A10,
class A11,
class A12,
10526 class A13,
class A14>
10527template <
class TYPE>
10529Variant14<A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14>&
10530Variant14<A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14>::
10531operator=(
const TYPE& value)
10533 Imp::operator=(value);
10537template <
class A1,
class A2,
class A3,
class A4,
class A5,
class A6,
10538 class A7,
class A8,
class A9,
class A10,
class A11,
class A12,
10539 class A13,
class A14>
10540template <
class TYPE>
10542#if defined(BSLMF_MOVABLEREF_USES_RVALUE_REFERENCES)
10544 !
bsl::is_same<Variant14<A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12,
10546 typename bsl::remove_cvref<TYPE>::type>::value,
10547Variant14<A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14> >::type&
10548Variant14<A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14>::
10549operator=(TYPE&& value)
10551Variant14<A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14>&
10552Variant14<A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14>::
10556#if defined(BSLMF_MOVABLEREF_USES_RVALUE_REFERENCES)
10559 TYPE& lvalue = value;
10560 Imp::operator=(MoveUtil::move(lvalue));
10566template <
class A1,
class A2,
class A3,
class A4,
class A5,
class A6,
10567 class A7,
class A8,
class A9,
class A10,
class A11,
class A12,
10568 class A13,
class A14>
10570Variant14<A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14>&
10571Variant14<A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14>::
10572operator=(
const Variant14& rhs)
10574 Imp::operator=(
static_cast<const Imp&
>(rhs));
10578template <
class A1,
class A2,
class A3,
class A4,
class A5,
class A6,
10579 class A7,
class A8,
class A9,
class A10,
class A11,
class A12,
10580 class A13,
class A14>
10582Variant14<A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14>&
10583Variant14<A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14>::
10586 Variant14& lvalue =
rhs;
10588 Imp::operator=(MoveUtil::move(
static_cast<Imp&
>(lvalue)));
10597template <
class A1,
class A2,
class A3,
class A4,
class A5,
class A6,
10598 class A7,
class A8,
class A9,
class A10,
class A11,
class A12,
10599 class A13,
class A14,
class A15>
10601Variant15<A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15>::
10606template <
class A1,
class A2,
class A3,
class A4,
class A5,
class A6,
10607 class A7,
class A8,
class A9,
class A10,
class A11,
class A12,
10608 class A13,
class A14,
class A15>
10609template <
class TYPE_OR_ALLOCATOR>
10611Variant15<A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15>::
10612Variant15(
const TYPE_OR_ALLOCATOR& valueOrAllocator)
10613: Imp(valueOrAllocator)
10617template <
class A1,
class A2,
class A3,
class A4,
class A5,
class A6,
10618 class A7,
class A8,
class A9,
class A10,
class A11,
class A12,
10619 class A13,
class A14,
class A15>
10620template <
class TYPE>
10622Variant15<A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15>::
10624: Imp(value, basicAllocator)
10628template <
class A1,
class A2,
class A3,
class A4,
class A5,
class A6,
10629 class A7,
class A8,
class A9,
class A10,
class A11,
class A12,
10630 class A13,
class A14,
class A15>
10631template <
class TYPE>
10633Variant15<A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15>::
10634#if defined(BSLMF_MOVABLEREF_USES_RVALUE_REFERENCES)
10635Variant15(TYPE&& value,
10646Variant15(
bslmf::MovableRef<TYPE> value)
10647: Imp(MoveUtil::move(value))
10652template <
class A1,
class A2,
class A3,
class A4,
class A5,
class A6,
10653 class A7,
class A8,
class A9,
class A10,
class A11,
class A12,
10654 class A13,
class A14,
class A15>
10655template <
class TYPE>
10657Variant15<A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15>::
10658#if defined(BSLMF_MOVABLEREF_USES_RVALUE_REFERENCES)
10659Variant15(TYPE&& value,
10668Variant15(
bslmf::MovableRef<TYPE> value,
10669 bslma::Allocator *basicAllocator)
10670: Imp(MoveUtil::move(value), basicAllocator)
10675template <
class A1,
class A2,
class A3,
class A4,
class A5,
class A6,
10676 class A7,
class A8,
class A9,
class A10,
class A11,
class A12,
10677 class A13,
class A14,
class A15>
10679Variant15<A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15>::
10681: Imp(static_cast<const Imp&>(original), basicAllocator)
10685template <
class A1,
class A2,
class A3,
class A4,
class A5,
class A6,
10686 class A7,
class A8,
class A9,
class A10,
class A11,
class A12,
10687 class A13,
class A14,
class A15>
10689Variant15<A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15>::
10691: Imp(MoveUtil::move(static_cast<Imp&>(MoveUtil::access(original))))
10695template <
class A1,
class A2,
class A3,
class A4,
class A5,
class A6,
10696 class A7,
class A8,
class A9,
class A10,
class A11,
class A12,
10697 class A13,
class A14,
class A15>
10699Variant15<A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15>::
10702: Imp(MoveUtil::move(static_cast<Imp&>(MoveUtil::access(original))),
10708template <
class A1,
class A2,
class A3,
class A4,
class A5,
class A6,
10709 class A7,
class A8,
class A9,
class A10,
class A11,
class A12,
10710 class A13,
class A14,
class A15>
10711template <
class TYPE>
10713Variant15<A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15>&
10714Variant15<A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15>::
10715operator=(
const TYPE& value)
10717 Imp::operator=(value);
10721template <
class A1,
class A2,
class A3,
class A4,
class A5,
class A6,
10722 class A7,
class A8,
class A9,
class A10,
class A11,
class A12,
10723 class A13,
class A14,
class A15>
10724template <
class TYPE>
10726#if defined(BSLMF_MOVABLEREF_USES_RVALUE_REFERENCES)
10728 !
bsl::is_same<Variant15<A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11,
10729 A12, A13, A14, A15>,
10730 typename bsl::remove_cvref<TYPE>::type>::value,
10731Variant15<A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14,
10733Variant15<A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15>::
10734operator=(TYPE&& value)
10736Variant15<A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15>&
10737Variant15<A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15>::
10741#if defined(BSLMF_MOVABLEREF_USES_RVALUE_REFERENCES)
10744 TYPE& lvalue = value;
10745 Imp::operator=(MoveUtil::move(lvalue));
10751template <
class A1,
class A2,
class A3,
class A4,
class A5,
class A6,
10752 class A7,
class A8,
class A9,
class A10,
class A11,
class A12,
10753 class A13,
class A14,
class A15>
10755Variant15<A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15>&
10756Variant15<A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15>::
10757operator=(
const Variant15& rhs)
10759 Imp::operator=(
static_cast<const Imp&
>(rhs));
10763template <
class A1,
class A2,
class A3,
class A4,
class A5,
class A6,
10764 class A7,
class A8,
class A9,
class A10,
class A11,
class A12,
10765 class A13,
class A14,
class A15>
10767Variant15<A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15>&
10768Variant15<A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15>::
10771 Variant15& lvalue =
rhs;
10773 Imp::operator=(MoveUtil::move(
static_cast<Imp&
>(lvalue)));
10782template <
class A1,
class A2,
class A3,
class A4,
class A5,
class A6,
10783 class A7,
class A8,
class A9,
class A10,
class A11,
class A12,
10784 class A13,
class A14,
class A15,
class A16>
10786Variant16<A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14,
10792template <
class A1,
class A2,
class A3,
class A4,
class A5,
class A6,
10793 class A7,
class A8,
class A9,
class A10,
class A11,
class A12,
10794 class A13,
class A14,
class A15,
class A16>
10795template <
class TYPE_OR_ALLOCATOR>
10797Variant16<A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14,
10799Variant16(
const TYPE_OR_ALLOCATOR& valueOrAllocator)
10800: Imp(valueOrAllocator)
10804template <
class A1,
class A2,
class A3,
class A4,
class A5,
class A6,
10805 class A7,
class A8,
class A9,
class A10,
class A11,
class A12,
10806 class A13,
class A14,
class A15,
class A16>
10807template <
class TYPE>
10809Variant16<A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14,
10812: Imp(value, basicAllocator)
10816template <
class A1,
class A2,
class A3,
class A4,
class A5,
class A6,
10817 class A7,
class A8,
class A9,
class A10,
class A11,
class A12,
10818 class A13,
class A14,
class A15,
class A16>
10819template <
class TYPE>
10821Variant16<A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14,
10823#if defined(BSLMF_MOVABLEREF_USES_RVALUE_REFERENCES)
10824Variant16(TYPE&& value,
10835Variant16(
bslmf::MovableRef<TYPE> value)
10836: Imp(MoveUtil::move(value))
10841template <
class A1,
class A2,
class A3,
class A4,
class A5,
class A6,
10842 class A7,
class A8,
class A9,
class A10,
class A11,
class A12,
10843 class A13,
class A14,
class A15,
class A16>
10844template <
class TYPE>
10846Variant16<A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14,
10848#if defined(BSLMF_MOVABLEREF_USES_RVALUE_REFERENCES)
10849Variant16(TYPE&& value,
10858Variant16(
bslmf::MovableRef<TYPE> value,
10859 bslma::Allocator *basicAllocator)
10860: Imp(MoveUtil::move(value), basicAllocator)
10865template <
class A1,
class A2,
class A3,
class A4,
class A5,
class A6,
10866 class A7,
class A8,
class A9,
class A10,
class A11,
class A12,
10867 class A13,
class A14,
class A15,
class A16>
10869Variant16<A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14,
10872: Imp(static_cast<const Imp&>(original), basicAllocator)
10876template <
class A1,
class A2,
class A3,
class A4,
class A5,
class A6,
10877 class A7,
class A8,
class A9,
class A10,
class A11,
class A12,
10878 class A13,
class A14,
class A15,
class A16>
10880Variant16<A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14,
10883: Imp(MoveUtil::move(static_cast<Imp&>(MoveUtil::access(original))))
10887template <
class A1,
class A2,
class A3,
class A4,
class A5,
class A6,
10888 class A7,
class A8,
class A9,
class A10,
class A11,
class A12,
10889 class A13,
class A14,
class A15,
class A16>
10891Variant16<A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14,
10895: Imp(MoveUtil::move(static_cast<Imp&>(MoveUtil::access(original))),
10901template <
class A1,
class A2,
class A3,
class A4,
class A5,
class A6,
10902 class A7,
class A8,
class A9,
class A10,
class A11,
class A12,
10903 class A13,
class A14,
class A15,
class A16>
10904template <
class TYPE>
10906Variant16<A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14,
10908Variant16<A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14,
10910operator=(
const TYPE& value)
10912 Imp::operator=(value);
10916template <
class A1,
class A2,
class A3,
class A4,
class A5,
class A6,
10917 class A7,
class A8,
class A9,
class A10,
class A11,
class A12,
10918 class A13,
class A14,
class A15,
class A16>
10919template <
class TYPE>
10921#if defined(BSLMF_MOVABLEREF_USES_RVALUE_REFERENCES)
10923 !
bsl::is_same<Variant16<A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11,
10924 A12, A13, A14, A15, A16>,
10925 typename bsl::remove_cvref<TYPE>::type>::value,
10926Variant16<A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15,
10928Variant16<A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15,
10929 A16>::operator=(TYPE&& value)
10931Variant16<A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15,
10933Variant16<A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15,
10937#if defined(BSLMF_MOVABLEREF_USES_RVALUE_REFERENCES)
10940 TYPE& lvalue = value;
10941 Imp::operator=(MoveUtil::move(lvalue));
10947template <
class A1,
class A2,
class A3,
class A4,
class A5,
class A6,
10948 class A7,
class A8,
class A9,
class A10,
class A11,
class A12,
10949 class A13,
class A14,
class A15,
class A16>
10951Variant16<A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14,
10953Variant16<A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14,
10955operator=(
const Variant16&
rhs)
10957 Imp::operator=(
static_cast<const Imp&
>(rhs));
10961template <
class A1,
class A2,
class A3,
class A4,
class A5,
class A6,
10962 class A7,
class A8,
class A9,
class A10,
class A11,
class A12,
10963 class A13,
class A14,
class A15,
class A16>
10965Variant16<A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14,
10967Variant16<A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14,
10971 Variant16& lvalue =
rhs;
10973 Imp::operator=(MoveUtil::move(
static_cast<Imp&
>(lvalue)));
10982template <
class A1,
class A2,
class A3,
class A4,
class A5,
class A6,
10983 class A7,
class A8,
class A9,
class A10,
class A11,
class A12,
10984 class A13,
class A14,
class A15,
class A16,
class A17>
10986Variant17<A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14,
10992template <
class A1,
class A2,
class A3,
class A4,
class A5,
class A6,
10993 class A7,
class A8,
class A9,
class A10,
class A11,
class A12,
10994 class A13,
class A14,
class A15,
class A16,
class A17>
10995template <
class TYPE_OR_ALLOCATOR>
10997Variant17<A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14,
10999Variant17(
const TYPE_OR_ALLOCATOR& valueOrAllocator)
11000: Imp(valueOrAllocator)
11004template <
class A1,
class A2,
class A3,
class A4,
class A5,
class A6,
11005 class A7,
class A8,
class A9,
class A10,
class A11,
class A12,
11006 class A13,
class A14,
class A15,
class A16,
class A17>
11007template <
class TYPE>
11009Variant17<A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14,
11012: Imp(value, basicAllocator)
11016template <
class A1,
class A2,
class A3,
class A4,
class A5,
class A6,
11017 class A7,
class A8,
class A9,
class A10,
class A11,
class A12,
11018 class A13,
class A14,
class A15,
class A16,
class A17>
11019template <
class TYPE>
11021Variant17<A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14,
11023#if defined(BSLMF_MOVABLEREF_USES_RVALUE_REFERENCES)
11024Variant17(TYPE&& value,
11035Variant17(
bslmf::MovableRef<TYPE> value)
11036: Imp(MoveUtil::move(value))
11041template <
class A1,
class A2,
class A3,
class A4,
class A5,
class A6,
11042 class A7,
class A8,
class A9,
class A10,
class A11,
class A12,
11043 class A13,
class A14,
class A15,
class A16,
class A17>
11044template <
class TYPE>
11046Variant17<A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14,
11048#if defined(BSLMF_MOVABLEREF_USES_RVALUE_REFERENCES)
11049Variant17(TYPE&& value,
11058Variant17(
bslmf::MovableRef<TYPE> value,
11059 bslma::Allocator *basicAllocator)
11060: Imp(MoveUtil::move(value), basicAllocator)
11065template <
class A1,
class A2,
class A3,
class A4,
class A5,
class A6,
11066 class A7,
class A8,
class A9,
class A10,
class A11,
class A12,
11067 class A13,
class A14,
class A15,
class A16,
class A17>
11069Variant17<A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14,
11072: Imp(static_cast<const Imp&>(original), basicAllocator)
11076template <
class A1,
class A2,
class A3,
class A4,
class A5,
class A6,
11077 class A7,
class A8,
class A9,
class A10,
class A11,
class A12,
11078 class A13,
class A14,
class A15,
class A16,
class A17>
11080Variant17<A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14,
11083: Imp(MoveUtil::move(static_cast<Imp&>(MoveUtil::access(original))))
11087template <
class A1,
class A2,
class A3,
class A4,
class A5,
class A6,
11088 class A7,
class A8,
class A9,
class A10,
class A11,
class A12,
11089 class A13,
class A14,
class A15,
class A16,
class A17>
11091Variant17<A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14,
11095: Imp(MoveUtil::move(static_cast<Imp&>(MoveUtil::access(original))),
11101template <
class A1,
class A2,
class A3,
class A4,
class A5,
class A6,
11102 class A7,
class A8,
class A9,
class A10,
class A11,
class A12,
11103 class A13,
class A14,
class A15,
class A16,
class A17>
11104template <
class TYPE>
11106Variant17<A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14,
11108Variant17<A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14,
11110operator=(
const TYPE& value)
11112 Imp::operator=(value);
11116template <
class A1,
class A2,
class A3,
class A4,
class A5,
class A6,
11117 class A7,
class A8,
class A9,
class A10,
class A11,
class A12,
11118 class A13,
class A14,
class A15,
class A16,
class A17>
11119template <
class TYPE>
11121#if defined(BSLMF_MOVABLEREF_USES_RVALUE_REFERENCES)
11123 !
bsl::is_same<Variant17<A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11,
11124 A12, A13, A14, A15, A16, A17>,
11125 typename bsl::remove_cvref<TYPE>::type>::value,
11126Variant17<A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15,
11128Variant17<A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15,
11129 A16, A17>::operator=(TYPE&& value)
11131Variant17<A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15,
11133Variant17<A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15,
11137#if defined(BSLMF_MOVABLEREF_USES_RVALUE_REFERENCES)
11140 TYPE& lvalue = value;
11141 Imp::operator=(MoveUtil::move(lvalue));
11147template <
class A1,
class A2,
class A3,
class A4,
class A5,
class A6,
11148 class A7,
class A8,
class A9,
class A10,
class A11,
class A12,
11149 class A13,
class A14,
class A15,
class A16,
class A17>
11151Variant17<A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14,
11153Variant17<A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14,
11155operator=(
const Variant17&
rhs)
11157 Imp::operator=(
static_cast<const Imp&
>(rhs));
11161template <
class A1,
class A2,
class A3,
class A4,
class A5,
class A6,
11162 class A7,
class A8,
class A9,
class A10,
class A11,
class A12,
11163 class A13,
class A14,
class A15,
class A16,
class A17>
11165Variant17<A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14,
11167Variant17<A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14,
11171 Variant17& lvalue =
rhs;
11173 Imp::operator=(MoveUtil::move(
static_cast<Imp&
>(lvalue)));
11182template <
class A1,
class A2,
class A3,
class A4,
class A5,
class A6,
11183 class A7,
class A8,
class A9,
class A10,
class A11,
class A12,
11184 class A13,
class A14,
class A15,
class A16,
class A17,
class A18>
11186Variant18<A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14,
11187 A15, A16, A17, A18>::
11192template <
class A1,
class A2,
class A3,
class A4,
class A5,
class A6,
11193 class A7,
class A8,
class A9,
class A10,
class A11,
class A12,
11194 class A13,
class A14,
class A15,
class A16,
class A17,
class A18>
11195template <
class TYPE_OR_ALLOCATOR>
11197Variant18<A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14,
11198 A15, A16, A17, A18>::
11199Variant18(
const TYPE_OR_ALLOCATOR& valueOrAllocator)
11200: Imp(valueOrAllocator)
11204template <
class A1,
class A2,
class A3,
class A4,
class A5,
class A6,
11205 class A7,
class A8,
class A9,
class A10,
class A11,
class A12,
11206 class A13,
class A14,
class A15,
class A16,
class A17,
class A18>
11207template <
class TYPE>
11209Variant18<A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14,
11210 A15, A16, A17, A18>::
11212: Imp(value, basicAllocator)
11216template <
class A1,
class A2,
class A3,
class A4,
class A5,
class A6,
11217 class A7,
class A8,
class A9,
class A10,
class A11,
class A12,
11218 class A13,
class A14,
class A15,
class A16,
class A17,
class A18>
11219template <
class TYPE>
11221Variant18<A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14,
11222 A15, A16, A17, A18>::
11223#if defined(BSLMF_MOVABLEREF_USES_RVALUE_REFERENCES)
11224Variant18(TYPE&& value,
11235Variant18(
bslmf::MovableRef<TYPE> value)
11236: Imp(MoveUtil::move(value))
11241template <
class A1,
class A2,
class A3,
class A4,
class A5,
class A6,
11242 class A7,
class A8,
class A9,
class A10,
class A11,
class A12,
11243 class A13,
class A14,
class A15,
class A16,
class A17,
class A18>
11244template <
class TYPE>
11246Variant18<A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14,
11247 A15, A16, A17, A18>::
11248#if defined(BSLMF_MOVABLEREF_USES_RVALUE_REFERENCES)
11249Variant18(TYPE&& value,
11258Variant18(
bslmf::MovableRef<TYPE> value,
11259 bslma::Allocator *basicAllocator)
11260: Imp(MoveUtil::move(value), basicAllocator)
11265template <
class A1,
class A2,
class A3,
class A4,
class A5,
class A6,
11266 class A7,
class A8,
class A9,
class A10,
class A11,
class A12,
11267 class A13,
class A14,
class A15,
class A16,
class A17,
class A18>
11269Variant18<A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14,
11270 A15, A16, A17, A18>::
11272: Imp(static_cast<const Imp&>(original), basicAllocator)
11276template <
class A1,
class A2,
class A3,
class A4,
class A5,
class A6,
11277 class A7,
class A8,
class A9,
class A10,
class A11,
class A12,
11278 class A13,
class A14,
class A15,
class A16,
class A17,
class A18>
11280Variant18<A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14,
11281 A15, A16, A17, A18>::
11283: Imp(MoveUtil::move(static_cast<Imp&>(MoveUtil::access(original))))
11287template <
class A1,
class A2,
class A3,
class A4,
class A5,
class A6,
11288 class A7,
class A8,
class A9,
class A10,
class A11,
class A12,
11289 class A13,
class A14,
class A15,
class A16,
class A17,
class A18>
11291Variant18<A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14,
11292 A15, A16, A17, A18>::
11295: Imp(MoveUtil::move(static_cast<Imp&>(MoveUtil::access(original))),
11301template <
class A1,
class A2,
class A3,
class A4,
class A5,
class A6,
11302 class A7,
class A8,
class A9,
class A10,
class A11,
class A12,
11303 class A13,
class A14,
class A15,
class A16,
class A17,
class A18>
11304template <
class TYPE>
11306Variant18<A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14,
11307 A15, A16, A17, A18>&
11308Variant18<A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14,
11309 A15, A16, A17, A18>::
11310operator=(
const TYPE& value)
11312 Imp::operator=(value);
11316template <
class A1,
class A2,
class A3,
class A4,
class A5,
class A6,
11317 class A7,
class A8,
class A9,
class A10,
class A11,
class A12,
11318 class A13,
class A14,
class A15,
class A16,
class A17,
class A18>
11319template <
class TYPE>
11321#if defined(BSLMF_MOVABLEREF_USES_RVALUE_REFERENCES)
11323 !
bsl::is_same<Variant18<A1, A2, A3, A4, A5, A6, A7, A8, A9, A10,
11324 A11, A12, A13, A14, A15, A16, A17, A18>,
11325 typename bsl::remove_cvref<TYPE>::type>::value,
11326Variant18<A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15,
11327 A16, A17, A18> >::type&
11328Variant18<A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15,
11329 A16, A17, A18>::operator=(TYPE&& value)
11331Variant18<A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15,
11333Variant18<A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15,
11337#if defined(BSLMF_MOVABLEREF_USES_RVALUE_REFERENCES)
11340 TYPE& lvalue = value;
11341 Imp::operator=(MoveUtil::move(lvalue));
11347template <
class A1,
class A2,
class A3,
class A4,
class A5,
class A6,
11348 class A7,
class A8,
class A9,
class A10,
class A11,
class A12,
11349 class A13,
class A14,
class A15,
class A16,
class A17,
class A18>
11351Variant18<A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14,
11352 A15, A16, A17, A18>&
11353Variant18<A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14,
11354 A15, A16, A17, A18>::
11355operator=(
const Variant18&
rhs)
11357 Imp::operator=(
static_cast<const Imp&
>(rhs));
11361template <
class A1,
class A2,
class A3,
class A4,
class A5,
class A6,
11362 class A7,
class A8,
class A9,
class A10,
class A11,
class A12,
11363 class A13,
class A14,
class A15,
class A16,
class A17,
class A18>
11365Variant18<A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14,
11366 A15, A16, A17, A18>&
11367Variant18<A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14,
11368 A15, A16, A17, A18>::
11371 Variant18& lvalue =
rhs;
11373 Imp::operator=(MoveUtil::move(
static_cast<Imp&
>(lvalue)));
11382template <
class A1,
class A2,
class A3,
class A4,
class A5,
class A6,
11383 class A7,
class A8,
class A9,
class A10,
class A11,
class A12,
11384 class A13,
class A14,
class A15,
class A16,
class A17,
class A18,
11387Variant19<A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14,
11388 A15, A16, A17, A18, A19>::
11393template <
class A1,
class A2,
class A3,
class A4,
class A5,
class A6,
11394 class A7,
class A8,
class A9,
class A10,
class A11,
class A12,
11395 class A13,
class A14,
class A15,
class A16,
class A17,
class A18,
11397template <
class TYPE_OR_ALLOCATOR>
11399Variant19<A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14,
11400 A15, A16, A17, A18, A19>::
11401Variant19(
const TYPE_OR_ALLOCATOR& valueOrAllocator)
11402: Imp(valueOrAllocator)
11406template <
class A1,
class A2,
class A3,
class A4,
class A5,
class A6,
11407 class A7,
class A8,
class A9,
class A10,
class A11,
class A12,
11408 class A13,
class A14,
class A15,
class A16,
class A17,
class A18,
11410template <
class TYPE>
11412Variant19<A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14,
11413 A15, A16, A17, A18, A19>::
11415: Imp(value, basicAllocator)
11419template <
class A1,
class A2,
class A3,
class A4,
class A5,
class A6,
11420 class A7,
class A8,
class A9,
class A10,
class A11,
class A12,
11421 class A13,
class A14,
class A15,
class A16,
class A17,
class A18,
11423template <
class TYPE>
11425Variant19<A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14,
11426 A15, A16, A17, A18, A19>::
11427#if defined(BSLMF_MOVABLEREF_USES_RVALUE_REFERENCES)
11428Variant19(TYPE&& value,
11439Variant19(
bslmf::MovableRef<TYPE> value)
11440: Imp(MoveUtil::move(value))
11445template <
class A1,
class A2,
class A3,
class A4,
class A5,
class A6,
11446 class A7,
class A8,
class A9,
class A10,
class A11,
class A12,
11447 class A13,
class A14,
class A15,
class A16,
class A17,
class A18,
11449template <
class TYPE>
11451Variant19<A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14,
11452 A15, A16, A17, A18, A19>::
11453#if defined(BSLMF_MOVABLEREF_USES_RVALUE_REFERENCES)
11454Variant19(TYPE&& value,
11463Variant19(
bslmf::MovableRef<TYPE> value,
11464 bslma::Allocator *basicAllocator)
11465: Imp(MoveUtil::move(value), basicAllocator)
11470template <
class A1,
class A2,
class A3,
class A4,
class A5,
class A6,
11471 class A7,
class A8,
class A9,
class A10,
class A11,
class A12,
11472 class A13,
class A14,
class A15,
class A16,
class A17,
class A18,
11475Variant19<A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14,
11476 A15, A16, A17, A18, A19>::
11478: Imp(static_cast<const Imp&>(original), basicAllocator)
11482template <
class A1,
class A2,
class A3,
class A4,
class A5,
class A6,
11483 class A7,
class A8,
class A9,
class A10,
class A11,
class A12,
11484 class A13,
class A14,
class A15,
class A16,
class A17,
class A18,
11487Variant19<A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14,
11488 A15, A16, A17, A18, A19>::
11490: Imp(MoveUtil::move(static_cast<Imp&>(MoveUtil::access(original))))
11494template <
class A1,
class A2,
class A3,
class A4,
class A5,
class A6,
11495 class A7,
class A8,
class A9,
class A10,
class A11,
class A12,
11496 class A13,
class A14,
class A15,
class A16,
class A17,
class A18,
11499Variant19<A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14,
11500 A15, A16, A17, A18, A19>::
11503: Imp(MoveUtil::move(static_cast<Imp&>(MoveUtil::access(original))),
11509template <
class A1,
class A2,
class A3,
class A4,
class A5,
class A6,
11510 class A7,
class A8,
class A9,
class A10,
class A11,
class A12,
11511 class A13,
class A14,
class A15,
class A16,
class A17,
class A18,
11513template <
class TYPE>
11515Variant19<A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14,
11516 A15, A16, A17, A18, A19>&
11517Variant19<A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14,
11518 A15, A16, A17, A18, A19>::
11519operator=(
const TYPE& value)
11521 Imp::operator=(value);
11525template <
class A1,
class A2,
class A3,
class A4,
class A5,
class A6,
11526 class A7,
class A8,
class A9,
class A10,
class A11,
class A12,
11527 class A13,
class A14,
class A15,
class A16,
class A17,
class A18,
11529template <
class TYPE>
11531#if defined(BSLMF_MOVABLEREF_USES_RVALUE_REFERENCES)
11533 !
bsl::is_same<Variant19<A1, A2, A3, A4, A5, A6, A7, A8, A9, A10,
11534 A11, A12, A13, A14, A15, A16, A17, A18, A19>,
11535 typename bsl::remove_cvref<TYPE>::type>::value,
11536Variant19<A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15,
11537 A16, A17, A18, A19> >::type&
11538Variant19<A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15,
11539 A16, A17, A18, A19>::operator=(TYPE&& value)
11541Variant19<A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15,
11542 A16, A17, A18, A19>&
11543Variant19<A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15,
11547#if defined(BSLMF_MOVABLEREF_USES_RVALUE_REFERENCES)
11550 TYPE& lvalue = value;
11551 Imp::operator=(MoveUtil::move(lvalue));
11557template <
class A1,
class A2,
class A3,
class A4,
class A5,
class A6,
11558 class A7,
class A8,
class A9,
class A10,
class A11,
class A12,
11559 class A13,
class A14,
class A15,
class A16,
class A17,
class A18,
11562Variant19<A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14,
11563 A15, A16, A17, A18, A19>&
11564Variant19<A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14,
11565 A15, A16, A17, A18, A19>::
11566operator=(
const Variant19&
rhs)
11568 Imp::operator=(
static_cast<const Imp&
>(rhs));
11572template <
class A1,
class A2,
class A3,
class A4,
class A5,
class A6,
11573 class A7,
class A8,
class A9,
class A10,
class A11,
class A12,
11574 class A13,
class A14,
class A15,
class A16,
class A17,
class A18,
11577Variant19<A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14,
11578 A15, A16, A17, A18, A19>&
11579Variant19<A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14,
11580 A15, A16, A17, A18, A19>::
11583 Variant19& lvalue =
rhs;
11585 Imp::operator=(MoveUtil::move(
static_cast<Imp&
>(lvalue)));
11593# error Not valid except when included from bdlb_variant.h
#define BSLMF_NESTED_TRAIT_DECLARATION(t_TYPE, t_TRAIT)
Definition bslmf_nestedtraitdeclaration.h:231
#define BSLMF_NESTED_TRAIT_DECLARATION_IF(t_TYPE, t_TRAIT, t_COND)
Definition bslmf_nestedtraitdeclaration.h:243
TYPES TypeList
Definition bdlb_variant.h:831
bslmf::TypeListTypeOf< 20, TYPES >::TypeOrDefault Type20
Definition bdlb_variant.h:856
bslmf::TypeListTypeOf< 10, TYPES >::TypeOrDefault Type10
Definition bdlb_variant.h:842
bslmf::TypeListTypeOf< 2, TYPES >::TypeOrDefault Type2
Definition bdlb_variant.h:834
bslmf::TypeListTypeOf< 8, TYPES >::TypeOrDefault Type8
Definition bdlb_variant.h:840
bslmf::TypeListTypeOf< 15, TYPES >::TypeOrDefault Type15
Definition bdlb_variant.h:847
bslmf::TypeListTypeOf< 14, TYPES >::TypeOrDefault Type14
Definition bdlb_variant.h:846
bslmf::TypeListTypeOf< 9, TYPES >::TypeOrDefault Type9
Definition bdlb_variant.h:841
friend class VariantImp
Definition bdlb_variant.h:896
bslmf::TypeListTypeOf< 4, TYPES >::TypeOrDefault Type4
Definition bdlb_variant.h:836
bslmf::TypeListTypeOf< 7, TYPES >::TypeOrDefault Type7
Definition bdlb_variant.h:839
friend bool operator==(const VariantImp< VARIANT_TYPES > &, const VariantImp< VARIANT_TYPES > &)
bslmf::TypeListTypeOf< 6, TYPES >::TypeOrDefault Type6
Definition bdlb_variant.h:838
bslmf::TypeListTypeOf< 12, TYPES >::TypeOrDefault Type12
Definition bdlb_variant.h:844
bslmf::TypeListTypeOf< 11, TYPES >::TypeOrDefault Type11
Definition bdlb_variant.h:843
bslmf::TypeListTypeOf< 5, TYPES >::TypeOrDefault Type5
Definition bdlb_variant.h:837
bslmf::TypeListTypeOf< 16, TYPES >::TypeOrDefault Type16
Definition bdlb_variant.h:848
bslmf::TypeListTypeOf< 13, TYPES >::TypeOrDefault Type13
Definition bdlb_variant.h:845
bslma::Allocator * getAllocator() const
Return the allocator used by this object to supply memory.
Definition bdlb_variant.h:6507
bslmf::TypeListTypeOf< 18, TYPES >::TypeOrDefault Type18
Definition bdlb_variant.h:850
bslmf::TypeListTypeOf< 3, TYPES >::TypeOrDefault Type3
Definition bdlb_variant.h:835
bslmf::TypeListTypeOf< 19, TYPES >::TypeOrDefault Type19
Definition bdlb_variant.h:851
bslmf::TypeListTypeOf< 1, TYPES >::TypeOrDefault Type1
Definition bdlb_variant.h:833
VariantImp_AllocatorBase(int type, bslma::Allocator *basicAllocator)
Definition bdlb_variant.h:6478
bslmf::TypeListTypeOf< 17, TYPES >::TypeOrDefault Type17
Definition bdlb_variant.h:849
bslma::Allocator * getAllocator() const
Definition bdlb_variant.h:6546
bslmf::TypeListTypeOf< 17, TYPES >::TypeOrDefault Type17
Definition bdlb_variant.h:964
friend class VariantImp
Definition bdlb_variant.h:1006
bslmf::TypeListTypeOf< 6, TYPES >::TypeOrDefault Type6
Definition bdlb_variant.h:953
bslmf::TypeListTypeOf< 4, TYPES >::TypeOrDefault Type4
Definition bdlb_variant.h:951
friend bool operator==(const VariantImp< VARIANT_TYPES > &, const VariantImp< VARIANT_TYPES > &)
bslmf::TypeListTypeOf< 8, TYPES >::TypeOrDefault Type8
Definition bdlb_variant.h:955
bslmf::TypeListTypeOf< 14, TYPES >::TypeOrDefault Type14
Definition bdlb_variant.h:961
bslmf::TypeListTypeOf< 1, TYPES >::TypeOrDefault Type1
Definition bdlb_variant.h:948
bslmf::TypeListTypeOf< 18, TYPES >::TypeOrDefault Type18
Definition bdlb_variant.h:965
bslmf::TypeListTypeOf< 10, TYPES >::TypeOrDefault Type10
Definition bdlb_variant.h:957
bslmf::TypeListTypeOf< 15, TYPES >::TypeOrDefault Type15
Definition bdlb_variant.h:962
bslmf::TypeListTypeOf< 2, TYPES >::TypeOrDefault Type2
Definition bdlb_variant.h:949
bslmf::TypeListTypeOf< 20, TYPES >::TypeOrDefault Type20
Definition bdlb_variant.h:971
bslmf::TypeListTypeOf< 7, TYPES >::TypeOrDefault Type7
Definition bdlb_variant.h:954
bslmf::TypeListTypeOf< 16, TYPES >::TypeOrDefault Type16
Definition bdlb_variant.h:963
bslmf::TypeListTypeOf< 12, TYPES >::TypeOrDefault Type12
Definition bdlb_variant.h:959
bslmf::TypeListTypeOf< 19, TYPES >::TypeOrDefault Type19
Definition bdlb_variant.h:966
bslmf::TypeListTypeOf< 3, TYPES >::TypeOrDefault Type3
Definition bdlb_variant.h:950
bslmf::TypeListTypeOf< 9, TYPES >::TypeOrDefault Type9
Definition bdlb_variant.h:956
TYPES TypeList
Definition bdlb_variant.h:946
bslmf::TypeListTypeOf< 13, TYPES >::TypeOrDefault Type13
Definition bdlb_variant.h:960
bslmf::TypeListTypeOf< 11, TYPES >::TypeOrDefault Type11
Definition bdlb_variant.h:958
bslmf::TypeListTypeOf< 5, TYPES >::TypeOrDefault Type5
Definition bdlb_variant.h:952
VariantImp_NoAllocatorBase(int type, bslma::Allocator *)
Definition bdlb_variant.h:6520
void reset()
Definition bdlb_variant.h:7592
STREAM & bdexStreamIn(STREAM &stream, int version)
DEPRECATED: Do not use.
Definition bdlb_variant.h:7781
bool is() const
Definition bdlb_variant.h:7725
~VariantImp()
Definition bdlb_variant.h:7336
int typeIndex() const
Definition bdlb_variant.h:7766
VariantImp()
Definition bdlb_variant.h:7178
const bsl::type_info & typeInfo() const
Definition bdlb_variant.h:7774
bsl::enable_if< Variant_ReturnValueHelper< VISITOR >::value==1, typenameVISITOR::ResultType >::type apply(VISITOR &visitor)
Definition bdlb_variant.h:1544
TYPE & createInPlace(ARGS &&... arguments)
Definition bdlb_variant.h:7574
VariantImp & operator=(const TYPE &value)
STREAM & bdexStreamOut(STREAM &stream, int version) const
DEPRECATED: Do not use.
Definition bdlb_variant.h:7819
bsl::enable_if< Variant_ReturnValueHelper< VISITOR >::value==1, typenameVISITOR::ResultType >::type applyRaw(VISITOR &visitor)
Definition bdlb_variant.h:1777
int maxSupportedBdexVersion() const
DEPRECATED: Do not use.
Definition bdlb_variant.h:7812
bool isUnset() const
Definition bdlb_variant.h:7732
TYPE & the()
Definition bdlb_variant.h:7637
VariantImp & assign(const TYPE &value)
void swap(VariantImp &other)
Definition bdlb_variant.h:7602
VariantImp & assignTo(const SOURCE_TYPE &value)
bsl::ostream & print(bsl::ostream &stream, int level=0, int spacesPerLevel=4) const
Definition bdlb_variant.h:7739
RESULT_TYPE operator()(ARGUMENT_TYPE &argument)
Definition bdlb_variant.h:6570
Variant_RawVisitorHelper(VISITOR *visitor)
Definition bdlb_variant.h:6559
Variant & operator=(const TYPE &value)
Variant()
Definition bdlb_variant.h:8043
static void swap(T *a, T *b)
Definition bslalg_swaputil.h:182
Definition bslma_allocator.h:545
Definition bslmf_movableref.h:752
#define BSLMF_ASSERT(expr)
Definition bslmf_assert.h:231
#define BSLS_ASSERT(X)
Definition bsls_assert.h:1976
#define BSLS_ASSERT_SAFE(X)
Definition bsls_assert.h:1917
#define BSLS_ASSERT_INVOKE_NORETURN(X)
Definition bsls_assert.h:2101
#define BSLS_ASSERT_UNREACHABLE(X)
Definition bsls_assert.h:1996
#define BSLS_COMPILERFEATURES_FORWARD_REF(T)
Definition bsls_compilerfeatures.h:2343
#define BSLS_COMPILERFEATURES_FORWARD(T, V)
Definition bsls_compilerfeatures.h:2349
bool operator!=(const FileCleanerConfiguration &lhs, const FileCleanerConfiguration &rhs)
bool operator==(const FileCleanerConfiguration &lhs, const FileCleanerConfiguration &rhs)
void swap(OptionValue &a, OptionValue &b)
void reset(TYPE *object)
Reset the value of the specified object to its default value.
int assign(LHS_TYPE *lhs, const RHS_TYPE &rhs)
Definition bdlb_algorithmworkaroundutil.h:74
bool operator!=(const BigEndianInt16 &lhs, const BigEndianInt16 &rhs)
char Variant_ReturnValueHelper_YesType
Definition bdlb_variant.h:775
bsl::ostream & operator<<(bsl::ostream &stream, const BigEndianInt16 &integer)
void swap(NullableAllocatedValue< TYPE > &a, NullableAllocatedValue< TYPE > &b)
bool operator==(const BigEndianInt16 &lhs, const BigEndianInt16 &rhs)
Definition bdlat_valuetypefunctions.h:939
void swap(array< VALUE_TYPE, SIZE > &lhs, array< VALUE_TYPE, SIZE > &rhs)
ALLOCATOR const STRING_VIEW_LIKE_TYPE & rhs
Definition bslstl_string.h:3918
ALLOCATOR & lhs
Definition bslstl_string.h:3917
Definition baljsn_encoder_testtypes.h:76
Definition bdlbb_blob.h:579
STREAM & bdexStreamIn(STREAM &stream, VALUE_TYPE &variable)
Definition bslx_instreamfunctions.h:1263
STREAM & bdexStreamOut(STREAM &stream, const TYPE &value)
Definition bslx_outstreamfunctions.h:1004
bslmf::TypeListTypeOf< 14, TYPES >::TypeOrDefault Type14
Definition bdlb_variant.h:1058
bsl::conditional< k_VARIANT_USES_BSLMA_ALLOCATOR, VariantImp_AllocatorBase< TYPES >, VariantImp_NoAllocatorBase< TYPES > >::type BaseType
Determines what the base type is.
Definition bdlb_variant.h:1143
bslmf::TypeListTypeOf< 7, TYPES >::TypeOrDefault Type7
Definition bdlb_variant.h:1051
bslmf::TypeListTypeOf< 12, TYPES >::TypeOrDefault Type12
Definition bdlb_variant.h:1056
bslmf::TypeListTypeOf< 18, TYPES >::TypeOrDefault Type18
Definition bdlb_variant.h:1062
bslmf::TypeListTypeOf< 6, TYPES >::TypeOrDefault Type6
Definition bdlb_variant.h:1050
bslmf::TypeListTypeOf< 13, TYPES >::TypeOrDefault Type13
Definition bdlb_variant.h:1057
bslmf::TypeListTypeOf< 19, TYPES >::TypeOrDefault Type19
Definition bdlb_variant.h:1063
bslmf::TypeListTypeOf< 17, TYPES >::TypeOrDefault Type17
Definition bdlb_variant.h:1061
bslmf::TypeListTypeOf< 3, TYPES >::TypeOrDefault Type3
Definition bdlb_variant.h:1047
bslmf::TypeListTypeOf< 11, TYPES >::TypeOrDefault Type11
Definition bdlb_variant.h:1055
@ VARIANT_USES_BSLMA_ALLOCATOR
Definition bdlb_variant.h:1133
@ VARIANT_IS_BITWISE_COPYABLE
Definition bdlb_variant.h:1134
@ k_VARIANT_IS_BITWISE_MOVEABLE
Definition bdlb_variant.h:1111
@ VARIANT_IS_BITWISE_MOVEABLE
Definition bdlb_variant.h:1135
@ k_VARIANT_USES_BSLMA_ALLOCATOR
Definition bdlb_variant.h:1067
@ k_VARIANT_IS_BITWISE_COPYABLE
Definition bdlb_variant.h:1089
bslmf::TypeListTypeOf< 1, TYPES >::TypeOrDefault Type1
Definition bdlb_variant.h:1045
bslmf::TypeListTypeOf< 8, TYPES >::TypeOrDefault Type8
Definition bdlb_variant.h:1052
bslmf::TypeListTypeOf< 2, TYPES >::TypeOrDefault Type2
Definition bdlb_variant.h:1046
bslmf::TypeListTypeOf< 16, TYPES >::TypeOrDefault Type16
Definition bdlb_variant.h:1060
bslmf::TypeListTypeOf< 5, TYPES >::TypeOrDefault Type5
Definition bdlb_variant.h:1049
bslmf::TypeListTypeOf< 20, TYPES >::TypeOrDefault Type20
Definition bdlb_variant.h:1064
bslmf::TypeListTypeOf< 15, TYPES >::TypeOrDefault Type15
Definition bdlb_variant.h:1059
bslmf::TypeListTypeOf< 4, TYPES >::TypeOrDefault Type4
Definition bdlb_variant.h:1048
bslmf::TypeListTypeOf< 9, TYPES >::TypeOrDefault Type9
Definition bdlb_variant.h:1053
bslmf::TypeListTypeOf< 10, TYPES >::TypeOrDefault Type10
Definition bdlb_variant.h:1054
static Variant_ReturnValueHelper_YesType match(typename bsl::remove_reference< typename T::ResultType >::type *)
Definition bslmf_conditional.h:123
Definition bslmf_enableif.h:530
Definition bslmf_integralconstant.h:261
Definition bslmf_isconvertible.h:875
Definition bslmf_issame.h:146
Definition bslmf_removeconst.h:159
t_TYPE type
This typedef is an alias to the (template parameter) t_TYPE.
Definition bslmf_removereference.h:156
static void construct(TARGET_TYPE *address, const ALLOCATOR &allocator)
Definition bslma_constructionutil.h:1244
Definition bslma_usesbslmaallocator.h:344
Definition bslmf_isbitwisecopyable.h:298
Definition bslmf_isbitwisemoveable.h:718
Definition bslmf_movableref.h:795
static MovableRef< t_TYPE > move(t_TYPE &reference) BSLS_KEYWORD_NOEXCEPT
Definition bslmf_movableref.h:1067
Definition bslmf_nil.h:133
Definition bslmf_typelist.h:1872
Definition bslmf_typelist.h:1915
Definition bslmf_typelist.h:1961
Definition bslmf_typelist.h:2010
Definition bslmf_typelist.h:2062
Definition bslmf_typelist.h:2117
Definition bslmf_typelist.h:2175
Definition bslmf_typelist.h:2236
Definition bslmf_typelist.h:2300
Definition bslmf_typelist.h:2367
Definition bslmf_typelist.h:1701
Definition bslmf_typelist.h:1719
Definition bslmf_typelist.h:1736
Definition bslmf_typelist.h:1759
Definition bslmf_typelist.h:1784
Definition bslmf_typelist.h:1811
Definition bslmf_typelist.h:1840
Definition bslmf_typelist.h:1612
Definition bsls_objectbuffer.h:277