9#ifndef INCLUDED_BSLSTL_VARIANT
10#define INCLUDED_BSLSTL_VARIANT
236#include <bslscm_version.h>
281#ifdef BSLS_COMPILERFEATURES_SUPPORT_DECLTYPE
282#ifdef BSLS_COMPILERFEATURES_SUPPORT_GENERALIZED_INITIALIZERS
283#ifdef BSLS_COMPILERFEATURES_SUPPORT_RVALUE_REFERENCES
284#ifdef BSLS_LIBRARYFEATURES_HAS_CPP11_BASELINE_LIBRARY
287#ifdef BSLS_LIBRARYFEATURES_HAS_CPP14_INTEGER_SEQUENCE
288#define BSL_VARIANT_FULL_IMPLEMENTATION
295#ifdef BSL_VARIANT_FULL_IMPLEMENTATION
296#include <type_traits>
300#ifdef BSLS_COMPILERFEATURES_SUPPORT_GENERALIZED_INITIALIZERS
301#include <initializer_list>
304#ifdef BSLS_LIBRARYFEATURES_HAS_CPP17_BASELINE_LIBRARY
308#if BSLS_COMPILERFEATURES_SIMULATE_CPP11_FEATURES
314# define COMPILING_BSLSTL_VARIANT_H
316# undef COMPILING_BSLSTL_VARIANT_H
334#if !BSLS_COMPILERFEATURES_SIMULATE_CPP11_FEATURES
335template <
class t_HEAD,
class... t_TAIL>
348template <
class t_BSL_VARIANT>
351template <
class t_BSL_VARIANT>
355template <
class t_BSL_VARIANT>
359template <
class t_BSL_VARIANT>
364#if !BSLS_COMPILERFEATURES_SIMULATE_CPP11_FEATURES
365template <
class t_HEAD,
class... t_TAIL>
371#ifdef BSLS_COMPILERFEATURES_SUPPORT_VARIABLE_TEMPLATES
374template <
class t_BSL_VARIANT>
391template <
size_t t_INDEX,
class t_TYPE>
394template <
size_t t_INDEX,
class t_TYPE>
399template <
size_t t_INDEX,
class t_TYPE>
404template <
size_t t_INDEX,
class t_TYPE>
410#if !BSLS_COMPILERFEATURES_SIMULATE_CPP11_FEATURES
416template <
size_t t_INDEX,
423template <
size_t t_INDEX>
431template <
class t_HEAD,
class... t_TAIL>
436template <
size_t t_INDEX,
class t_HEAD,
class... t_TAIL>
443#ifdef BSLS_COMPILERFEATURES_SUPPORT_ALIAS_TEMPLATES
446template <
size_t t_INDEX,
class t_TYPE>
447using variant_alternative_t =
465template <
class t_HEAD,
class... t_TAIL>
473template <
class t_HASHALG,
class t_HEAD,
class... t_TAIL>
481template <
class t_TYPE,
class t_HEAD,
class... t_TAIL>
485#ifdef BSL_VARIANT_FULL_IMPLEMENTATION
491template <
size_t t_INDEX,
class t_HEAD,
class... t_TAIL>
494template <
size_t t_INDEX,
class t_HEAD,
class... t_TAIL>
497template <
size_t t_INDEX,
class t_HEAD,
class... t_TAIL>
500template <
size_t t_INDEX,
class t_HEAD,
class... t_TAIL>
502 variant<t_HEAD, t_TAIL...> >::type&&
510template <
class t_TYPE,
class t_HEAD,
class... t_TAIL>
512template <
class t_TYPE,
class t_HEAD,
class... t_TAIL>
514template <
class t_TYPE,
class t_HEAD,
class... t_TAIL>
516template <
class t_TYPE,
class t_HEAD,
class... t_TAIL>
519template <
size_t t_INDEX,
class t_HEAD,
class... t_TAIL>
522 variant<t_HEAD, t_TAIL...> >::type>::type
530template <
size_t t_INDEX,
class t_HEAD,
class... t_TAIL>
533 variant<t_HEAD, t_TAIL...> >::type>::type
536template <
class t_TYPE,
class t_HEAD,
class... t_TAIL>
545template <
class t_TYPE,
class t_HEAD,
class... t_TAIL>
560template <
bool t_VALID,
size_t t_INDEX,
class t_ARG,
class t_VARIANT>
564template <
size_t t_INDEX,
class t_VARIANT>
572template <
size_t t_INDEX,
class t_VARIANT>
584template <
size_t t_INDEX,
class t_VARIANT>
590 typedef BloombergLP::bslmf::MovableRef<
601template <
size_t t_INDEX,
603 class t_VARIANT =
typename BloombergLP::bslmf::MovableRefUtil::
607#if !BSLS_COMPILERFEATURES_SIMULATE_CPP11_FEATURES
608template <
size_t t_INDEX,
class t_ARG,
class t_HEAD,
class... t_TAIL>
615 bsl::variant<t_HEAD, t_TAIL...> > {
623template <class t_TYPE, class t_HEAD, class... t_TAIL>
624struct Variant_GetTypeReturnType;
630template <class t_TYPE, class t_HEAD, class... t_TAIL>
631struct Variant_GetTypeReturnType<t_TYPE, bsl::variant<t_HEAD, t_TAIL...> > {
633 typedef typename add_pointer<t_TYPE>::type pointer;
643template <size_t t_INDEX, class t_VARIANT>
644typename Variant_GetIndexReturnType<t_INDEX, t_VARIANT>::type
646template <size_t t_INDEX, class t_VARIANT>
647typename Variant_GetIndexReturnType<
649 BloombergLP::bslmf::MovableRef<t_VARIANT> >::type
650get(BloombergLP::bslmf::MovableRef<t_VARIANT> obj);
657template <class t_TYPE, class t_VARIANT>
658typename Variant_GetTypeReturnType<t_TYPE&, t_VARIANT>::type get(
660template <class t_TYPE, class t_VARIANT>
661typename Variant_GetTypeReturnType<const t_TYPE&, t_VARIANT>::type get(
662 const t_VARIANT& obj);
663template <class t_TYPE, class t_VARIANT>
664typename Variant_GetTypeReturnType<BloombergLP::bslmf::MovableRef<t_TYPE>,
665 t_VARIANT>::type get(
666 BloombergLP::bslmf::MovableRef<t_VARIANT> obj);
673template <size_t t_INDEX, class t_VARIANT>
674typename Variant_GetIndexReturnType<t_INDEX, t_VARIANT>::pointer
675get_if(t_VARIANT *obj) BSLS_KEYWORD_NOEXCEPT;
682template <class t_TYPE, class t_VARIANT>
683typename Variant_GetTypeReturnType<t_TYPE, t_VARIANT>::pointer get_if(
684 t_VARIANT *obj) BSLS_KEYWORD_NOEXCEPT;
685template <class t_TYPE, class t_VARIANT>
686typename Variant_GetTypeReturnType<const t_TYPE, t_VARIANT>::pointer get_if(
687 const t_VARIANT *obj) BSLS_KEYWORD_NOEXCEPT;
692#if !BSLS_COMPILERFEATURES_SIMULATE_CPP11_FEATURES
697template <class t_HEAD, class... t_TAIL>
698bool operator==(const variant<t_HEAD, t_TAIL...>& lhs,
699 const variant<t_HEAD, t_TAIL...>& rhs);
705template <class t_HEAD, class... t_TAIL>
706bool operator!=(const variant<t_HEAD, t_TAIL...>& lhs,
707 const variant<t_HEAD, t_TAIL...>& rhs);
714template <class t_HEAD, class... t_TAIL>
715bool operator<(const variant<t_HEAD, t_TAIL...>& lhs,
716 const variant<t_HEAD, t_TAIL...>& rhs);
724template <class t_HEAD, class... t_TAIL>
725bool operator>(const variant<t_HEAD, t_TAIL...>& lhs,
726 const variant<t_HEAD, t_TAIL...>& rhs);
733template <class t_HEAD, class... t_TAIL>
734bool operator<=(const variant<t_HEAD, t_TAIL...>& lhs,
735 const variant<t_HEAD, t_TAIL...>& rhs);
743template <class t_HEAD, class... t_TAIL>
744bool operator>=(const variant<t_HEAD, t_TAIL...>& lhs,
745 const variant<t_HEAD, t_TAIL...>& rhs);
747#if defined BSLS_COMPILERFEATURES_SUPPORT_THREE_WAY_COMPARISON && \
748 defined BSLS_LIBRARYFEATURES_HAS_CPP20_CONCEPTS
757template <class... t_ALTS>
758 requires(std::three_way_comparable<t_ALTS> && ...)
759constexpr std::common_comparison_category_t<
760 std::compare_three_way_result_t<t_ALTS>...>
761operator<=>(const variant<t_ALTS...>& lhs, const variant<t_ALTS...>& rhs);
775struct Variant_ConstructFromStdTag {};
777#if !BSLS_COMPILERFEATURES_SIMULATE_CPP11_FEATURES
781template <class t_HEAD = BSLSTL_VARIANT_NOT_A_TYPE, class... t_TAIL>
782struct Variant_UsesBslmaAllocatorAny;
785struct Variant_UsesBslmaAllocatorAny<BSLSTL_VARIANT_NOT_A_TYPE>
789template <class t_HEAD, class... t_TAIL>
790struct Variant_UsesBslmaAllocatorAny
791: bsl::integral_constant<
793 BloombergLP::bslma::UsesBslmaAllocator<t_HEAD>::value ||
794 BloombergLP::bslstl::Variant_UsesBslmaAllocatorAny<
801template <class t_HEAD = BSLSTL_VARIANT_NOT_A_TYPE, class... t_TAIL>
802struct Variant_IsBitwiseMoveableAll;
805struct Variant_IsBitwiseMoveableAll<BSLSTL_VARIANT_NOT_A_TYPE>
809template <class t_HEAD, class... t_TAIL>
810struct Variant_IsBitwiseMoveableAll
811: bsl::integral_constant<
813 BloombergLP::bslmf::IsBitwiseMoveable<t_HEAD>::value &&
814 Variant_IsBitwiseMoveableAll<t_TAIL...>::value> {
821template <class t_TYPE>
822struct Variant_IsTag : bsl::false_type {
826struct Variant_IsTag<bsl::allocator_arg_t> : bsl::true_type {
829template <class t_TYPE>
830struct Variant_IsTag<bsl::in_place_type_t<t_TYPE> > : bsl::true_type {
833template <size_t t_INDEX>
834struct Variant_IsTag<bsl::in_place_index_t<t_INDEX> > : bsl::true_type {
837#ifdef BSL_VARIANT_FULL_IMPLEMENTATION
841template <class t_TO, class t_FROM>
842struct Variant_IsConstructible : std::is_constructible<t_TO, t_FROM> {
848template <class t_LHS, class t_RHS>
849struct Variant_IsAssignable : std::is_assignable<t_LHS, t_RHS> {
855template <class t_TO, class t_FROM>
856struct Variant_IsConstructible : bsl::true_type {
862template <class t_LHS, class t_RHS>
863struct Variant_IsAssignable : bsl::true_type {
870#define BSLSTL_VARIANT_DEFINE_IF_CONSTRUCTS_FROM(VARIANT, TYPE) \
871 typename bsl::enable_if< \
872 BloombergLP::bslstl::Variant_ConstructsFromType<VARIANT, \
874 BloombergLP::bslstl::Variant_NoSuchType>::type
879#define BSLSTL_VARIANT_DECLARE_IF_CONSTRUCTS_FROM(VARIANT, TYPE) \
880 BSLSTL_VARIANT_DEFINE_IF_CONSTRUCTS_FROM( \
882 TYPE) = BloombergLP::bslstl::Variant_NoSuchType(0)
886#define BSLSTL_VARIANT_DEFINE_IF_CONSTRUCTS_FROM_STD(STD_VARIANT) \
888 BloombergLP::bslstl::variant_constructsFromStd<variant, STD_VARIANT>, \
889 BloombergLP::bslstl::Variant_NoSuchType>
893#define BSLSTL_VARIANT_DECLARE_IF_CONSTRUCTS_FROM_STD(STD_VARIANT) \
894 BSLSTL_VARIANT_DEFINE_IF_CONSTRUCTS_FROM_STD(STD_VARIANT) \
895 = BloombergLP::bslstl::Variant_NoSuchType(0)
903#define BSLSTL_VARIANT_DEFINE_IF_HAS_UNIQUE_TYPE(TYPE) \
904 typename bsl::enable_if< \
905 BloombergLP::bslstl::Variant_HasUniqueType<TYPE, variant>::value, \
906 BloombergLP::bslstl::Variant_NoSuchType>::type
911#define BSLSTL_VARIANT_DECLARE_IF_HAS_UNIQUE_TYPE(TYPE) \
912 BSLSTL_VARIANT_DEFINE_IF_HAS_UNIQUE_TYPE( \
913 TYPE) = BloombergLP::bslstl::Variant_NoSuchType(0)
919#define BSLSTL_VARIANT_HAS_UNIQUE_TYPE(TYPE) \
920 BloombergLP::bslstl:: \
921 Variant_HasUniqueType<TYPE, variant<t_HEAD, t_TAIL...> >::value
926#define BSLSTL_VARIANT_TYPE_AT_INDEX(INDEX) \
927 typename bsl::variant_alternative<INDEX, \
928 bsl::variant<t_HEAD, t_TAIL...> >::type
933#define BSLSTL_VARIANT_INDEX_OF(TYPE, VARIANT) \
934 BloombergLP::bslstl::Variant_TypeToIndex<TYPE, VARIANT>::value
940#define BSLSTL_VARIANT_CONVERT_INDEX_OF(TYPE, VARIANT) \
941 BloombergLP::bslstl::Variant_ConvertIndex<TYPE, VARIANT>::value
947#define BSLSTL_VARIANT_CONVERT_TYPE_OF(TYPE, VARIANT) \
948 typename bsl::variant_alternative<BSLSTL_VARIANT_CONVERT_INDEX_OF( \
956#define BSLSTL_VARIANT_VISITID(RET, VISITOR, VAROBJ) \
957 BloombergLP::bslstl::Variant_ImpUtil::visitId<RET>(VISITOR, VAROBJ);
963template <size_t t_INDEX,
965 class t_HEAD = BSLSTL_VARIANT_NOT_A_TYPE,
967struct Variant_TypeToIndexImpl
969 bsl::is_same<t_TYPE, t_HEAD>::value,
970 bsl::integral_constant<size_t, t_INDEX>,
971 Variant_TypeToIndexImpl<t_INDEX + 1, t_TYPE, t_TAIL...> >::type {
977template <size_t t_INDEX, class t_TYPE>
978struct Variant_TypeToIndexImpl<t_INDEX, t_TYPE, BSLSTL_VARIANT_NOT_A_TYPE>
979: bsl::integral_constant<size_t, bsl::variant_npos> {
987template <class t_TYPE, class t_VARIANT>
988struct Variant_TypeToIndex;
990template <class t_TYPE, class t_HEAD, class... t_TAIL>
991struct Variant_TypeToIndex<t_TYPE, bsl::variant<t_HEAD, t_TAIL...> >
992: Variant_TypeToIndexImpl<0, t_TYPE, t_HEAD, t_TAIL...> {
999template <class t_TYPE,
1000 class t_HEAD = BSLSTL_VARIANT_NOT_A_TYPE,
1002struct Variant_CountType
1003: bsl::integral_constant<size_t,
1004 bsl::is_same<t_TYPE, t_HEAD>::value +
1005 Variant_CountType<t_TYPE, t_TAIL...>::value> {
1009template <class t_TYPE>
1010struct Variant_CountType<t_TYPE, BSLSTL_VARIANT_NOT_A_TYPE>
1011: bsl::integral_constant<size_t, 0> {
1020template <class t_TYPE, class t_VARIANT>
1021struct Variant_HasUniqueType;
1023template <class t_TYPE, class t_HEAD, class... t_TAIL>
1024struct Variant_HasUniqueType<t_TYPE, bsl::variant<t_HEAD, t_TAIL...> >
1025: bsl::integral_constant<bool,
1026 Variant_CountType<t_TYPE, t_HEAD, t_TAIL...>::value ==
1034template <class t_TYPE,
1035 class t_HEAD = BSLSTL_VARIANT_NOT_A_TYPE,
1037struct Variant_CountCVType
1038: bsl::integral_constant<
1040 bsl::is_same<typename bsl::remove_cv<t_TYPE>::type,
1041 typename bsl::remove_cv<t_HEAD>::type>::value +
1042 Variant_CountCVType<t_TYPE, t_TAIL...>::value> {
1046template <class t_TYPE>
1047struct Variant_CountCVType<t_TYPE, BSLSTL_VARIANT_NOT_A_TYPE>
1048: bsl::integral_constant<size_t, 0> {
1057template <class t_TYPE, class t_VARIANT>
1058struct Variant_HasUniqueCVType;
1060template <class t_TYPE, class t_HEAD, class... t_TAIL>
1061struct Variant_HasUniqueCVType<t_TYPE, bsl::variant<t_HEAD, t_TAIL...> >
1062: bsl::integral_constant<
1064 Variant_CountCVType<t_TYPE, t_HEAD, t_TAIL...>::value == 1> {
1075template <class t_VARIANT, size_t t_INDEX>
1076struct Variant_CVQualAlt {
1079 typedef typename bsl::variant_alternative<
1081 typename bslmf::MovableRefUtil::RemoveReference<t_VARIANT>::type>::type
1084 typedef typename bsl::conditional<
1085 bslmf::MovableRefUtil::IsReference<t_VARIANT>::value,
1086 typename bsl::conditional<
1087 bslmf::MovableRefUtil::IsMovableReference<t_VARIANT>::value,
1088 typename bslmf::MovableRefUtil::AddMovableReference<CVAlt>::type,
1089 typename bslmf::MovableRefUtil::AddLvalueReference<CVAlt>::type>::
1103template <class t_RET,
1107 bsl::variant_size<typename bslmf::MovableRefUtil::
1108 RemoveReference<t_VARIANT>::type>::value -
1110struct Variant_IsSameReturnType
1111: public bsl::integral_constant<
1114 typename bsl::invoke_result<
1116 typename Variant_CVQualAlt<t_VARIANT, t_INDEX>::type>::
1118 Variant_IsSameReturnType<t_RET, t_VISITOR, t_VARIANT, t_INDEX - 1>::
1121template <class t_RET, class t_VISITOR, class t_VARIANT>
1122struct Variant_IsSameReturnType<t_RET, t_VISITOR, t_VARIANT, 0>
1123: bsl::is_same<t_RET,
1124 typename bsl::invoke_result<
1126 typename Variant_CVQualAlt<t_VARIANT, 0>::type>::type> {
1137struct Variant_ImpUtil {
1139#if !BSLS_COMPILERFEATURES_SIMULATE_CPP11_FEATURES
1141 template <class t_HEAD, class... t_TAIL>
1142 static bsl::variant<t_HEAD, t_TAIL...>& asVariant(
1143 bsl::variant<t_HEAD, t_TAIL...>& v)
1147 template <class t_HEAD, class... t_TAIL>
1148 static const bsl::variant<t_HEAD, t_TAIL...>& asVariant(
1149 const bsl::variant<t_HEAD, t_TAIL...>& v)
1155#if defined(BSLS_COMPILERFEATURES_SUPPORT_RVALUE_REFERENCES) \
1156 && defined(BSLS_COMPILERFEATURES_SUPPORT_VARIADIC_TEMPLATES)
1158 template <class t_HEAD, class... t_TAIL>
1159 static bsl::variant<t_HEAD, t_TAIL...>&& asVariant(
1160 bsl::variant<t_HEAD, t_TAIL...>&& v)
1162 return std::move(v);
1164 template <class t_HEAD, class... t_TAIL>
1165 static const bsl::variant<t_HEAD, t_TAIL...>&& asVariant(
1166 const bsl::variant<t_HEAD, t_TAIL...>&& v)
1168 return std::move(v);
1178 template <class t_RET, size_t t_INDEX, class t_VARIANT>
1179 static t_RET& get(t_VARIANT& variant);
1180 template <class t_RET, size_t t_INDEX, class t_VARIANT>
1181 static t_RET& get(const t_VARIANT& variant);
1183#ifdef BSL_VARIANT_FULL_IMPLEMENTATION
1193 template <class t_RET, class t_VISITOR, class t_VARIANT>
1194 static t_RET visit(t_VISITOR&& visitor, t_VARIANT&& variant);
1206 template <class t_RET, class t_VISITOR, class t_VARIANT>
1207 static t_RET visitId(t_VISITOR&& visitor, t_VARIANT&& variant);
1219 template <class t_RET, class t_VISITOR, class t_VARIANT>
1220 static t_RET visit(t_VISITOR& visitor, t_VARIANT& variant);
1221 template <class t_RET, class t_VISITOR, class t_VARIANT>
1222 static t_RET visit(t_VISITOR& visitor, const t_VARIANT& variant);
1232 template <class t_RET, class t_VISITOR, class t_VARIANT>
1233 static t_RET moveVisit(t_VISITOR& visitor, t_VARIANT& variant);
1245 template <class t_RET, class t_VISITOR, class t_VARIANT>
1246 static t_RET visitId(t_VISITOR& visitor, t_VARIANT& variant);
1247 template <class t_RET, class t_VISITOR, class t_VARIANT>
1248 static t_RET visitId(t_VISITOR& visitor, const t_VARIANT& variant);
1252#ifndef BSL_VARIANT_FULL_IMPLEMENTATION
1272 template <class t_RET, size_t t_INDEX, class t_VARIANT>
1273 static t_RET& unsafeGet(t_VARIANT& variant);
1274 template <class t_RET, size_t t_INDEX, class t_VARIANT>
1275 static t_RET& unsafeGet(const t_VARIANT& variant);
1285 template <class t_TYPE, class t_VARIANT>
1286 static t_TYPE& unsafeGet(t_VARIANT& obj);
1287 template <class t_TYPE, class t_VARIANT>
1288 static const t_TYPE& unsafeGet(const t_VARIANT& obj);
1297 template <class t_RET, class t_VARIANT_UNION>
1298 static t_RET& getAlternative(
1299 bsl::in_place_index_t<0>,
1300 t_VARIANT_UNION& variantUnion) BSLS_KEYWORD_NOEXCEPT;
1312 template <class t_RET, size_t t_INDEX, class t_VARIANT_UNION>
1313 static t_RET& getAlternative(
1314 bsl::in_place_index_t<t_INDEX>,
1315 t_VARIANT_UNION& variantUnion) BSLS_KEYWORD_NOEXCEPT;
1317 template <class t_VARIANT>
1318 static bool Equal(const t_VARIANT& lhs, const t_VARIANT& rhs);
1319 template <class t_VARIANT>
1320 static bool NotEqual(const t_VARIANT& lhs, const t_VARIANT& rhs);
1321 template <class t_VARIANT>
1322 static bool LessThan(const t_VARIANT& lhs, const t_VARIANT& rhs);
1323 template <class t_VARIANT>
1324 static bool GreaterThan(const t_VARIANT& lhs, const t_VARIANT& rhs);
1325 template <class t_VARIANT>
1326 static bool LessOrEqual(const t_VARIANT& lhs, const t_VARIANT& rhs);
1335 template <class t_VARIANT>
1336 static bool GreaterOrEqual(const t_VARIANT& lhs, const t_VARIANT& rhs);
1338#ifdef BSLS_LIBRARYFEATURES_HAS_CPP17_BASELINE_LIBRARY
1341 template <class t_VARIANT, class t_STD_VARIANT>
1342 class ConstructFromStdVisitor;
1346#ifdef BSLS_LIBRARYFEATURES_HAS_CPP17_BASELINE_LIBRARY
1352template <class t_VARIANT, class t_STD_VARIANT>
1353class Variant_ImpUtil::ConstructFromStdVisitor {
1356 t_VARIANT& d_target;
1357 t_STD_VARIANT& d_original;
1366 explicit ConstructFromStdVisitor(t_VARIANT& target,
1367 t_STD_VARIANT& original);
1383 template <size_t t_INDEX, class t_TYPE>
1384 void operator()(bsl::in_place_index_t<t_INDEX>, t_TYPE&) const;
1388#ifdef BSL_VARIANT_FULL_IMPLEMENTATION
1397template <class t_TYPE>
1398struct Variant_ArrayHelper {
1406template <class t_TYPE, class = void>
1407struct Variant_CheckForP1957R2 : bsl::true_type {
1410template <class t_TYPE>
1411struct Variant_CheckForP1957R2<
1413 bsl::void_t<decltype(Variant_ArrayHelper<t_TYPE>{{"bc"}})> >
1417template <class t_DEST, class t_SOURCE, class = void>
1418struct Variant_ConvertsWithoutNarrowing : bsl::false_type {
1435template <class t_DEST, class t_SOURCE>
1436struct Variant_ConvertsWithoutNarrowing<
1439 bsl::void_t<decltype(
1440 Variant_ArrayHelper<t_DEST>{{std::declval<t_SOURCE>()}})> >
1441: bsl::integral_constant<
1443 !(!Variant_CheckForP1957R2<bool>::value &&
1444 bsl::is_same<bool, typename bsl::remove_cvref<t_DEST>::type>::value &&
1446 typename bsl::remove_cvref<t_SOURCE>::type>::value)> {
1467template <class t_SRC, size_t t_INDEX, class t_HEAD, class... t_TAIL>
1468struct Variant_OverloadSetImp
1469: Variant_OverloadSetImp<t_SRC, t_INDEX + 1, t_TAIL...> {
1471 using Variant_OverloadSetImp<t_SRC, t_INDEX + 1, t_TAIL...>::candidate;
1473 template <class t_DEST = t_HEAD>
1474 static typename bsl::enable_if<
1475 Variant_ConvertsWithoutNarrowing<t_DEST, t_SRC>::value,
1476 bsl::integral_constant<size_t, t_INDEX> >::type candidate(t_HEAD);
1478template <class t_SRC, size_t t_INDEX, class t_HEAD>
1479struct Variant_OverloadSetImp<t_SRC, t_INDEX, t_HEAD> {
1480 template <class t_DEST = t_HEAD>
1481 static typename bsl::enable_if<
1482 Variant_ConvertsWithoutNarrowing<t_DEST, t_SRC>::value,
1483 bsl::integral_constant<size_t, t_INDEX> >::type candidate(t_HEAD);
1494template <class t_SRC, class t_VARIANT, class = void>
1495struct Variant_OverloadHelper {
1497 typedef bsl::integral_constant<size_t, bsl::variant_npos> Index;
1503template <class t_SRC, class t_HEAD, class... t_TAIL>
1504struct Variant_OverloadHelper<
1506 bsl::variant<t_HEAD, t_TAIL...>,
1507 bsl::void_t<decltype(Variant_OverloadSetImp<t_SRC, 0, t_HEAD, t_TAIL...>::
1508 candidate(std::declval<t_SRC>()))> > {
1510 Variant_OverloadSetImp<t_SRC, 0, t_HEAD, t_TAIL...>::candidate(
1511 std::declval<t_SRC>())) Index;
1523template <class t_TYPE, class t_VARIANT>
1524struct Variant_ConvertIndex
1525: Variant_OverloadHelper<t_TYPE, t_VARIANT>::Index {
1530#if !BSLS_COMPILERFEATURES_SIMULATE_CPP11_FEATURES
1537template <size_t t_INDEX,
1539 class t_HEAD = BSLSTL_VARIANT_NOT_A_TYPE,
1541struct Variant_ConvertToIndexImpl;
1545template <size_t t_INDEX, class t_TYPE>
1546struct Variant_ConvertToIndexImpl<t_INDEX, t_TYPE, BSLSTL_VARIANT_NOT_A_TYPE>
1547: bsl::integral_constant<size_t, bsl::variant_npos> {
1549template <size_t t_INDEX, class t_TYPE, class t_HEAD, class... t_TAIL>
1550struct Variant_ConvertToIndexImpl<t_INDEX, t_TYPE, t_HEAD, t_TAIL...>
1552 bsl::is_same<typename bsl::remove_cv<t_TYPE>::type,
1553 typename bsl::remove_cv<t_HEAD>::type>::value,
1554 bsl::integral_constant<size_t, t_INDEX>,
1555 Variant_ConvertToIndexImpl<t_INDEX + 1, t_TYPE, t_TAIL...> >::type {
1570template <class t_TYPE, class t_VARIANT>
1571struct Variant_ConvertIndex;
1573template <class t_TYPE, class t_HEAD, class... t_TAIL>
1574struct Variant_ConvertIndex<t_TYPE, bsl::variant<t_HEAD, t_TAIL...> >
1575: Variant_ConvertToIndexImpl<
1577 typename bslmf::MovableRefUtil::RemoveReference<t_TYPE>::type,
1590template <class t_VARIANT,
1592 size_t t_INDEX = BSLSTL_VARIANT_CONVERT_INDEX_OF(t_TYPE, t_VARIANT)>
1593struct Variant_IsAlternativeConstructibleFrom
1594: bsl::integral_constant<
1596 Variant_IsConstructible<
1597 typename bsl::variant_alternative<t_INDEX, t_VARIANT>::type,
1599 Variant_HasUniqueCVType<BSLSTL_VARIANT_CONVERT_TYPE_OF(t_TYPE,
1601 t_VARIANT>::value> {
1604template <class t_VARIANT, class t_TYPE>
1605struct Variant_IsAlternativeConstructibleFrom<t_VARIANT,
1616template <class t_VARIANT,
1618 size_t t_INDEX = BSLSTL_VARIANT_CONVERT_INDEX_OF(t_TYPE, t_VARIANT)>
1619struct Variant_isAlternativeAssignableFrom
1620: bsl::integral_constant<
1622 Variant_IsAssignable<
1623 typename bsl::variant_alternative<t_INDEX, t_VARIANT>::type&,
1625 Variant_HasUniqueCVType<BSLSTL_VARIANT_CONVERT_TYPE_OF(t_TYPE,
1627 t_VARIANT>::value> {
1630template <class t_VARIANT, class t_TYPE>
1631struct Variant_isAlternativeAssignableFrom<t_VARIANT,
1642template <class t_TYPE>
1643struct Variant_CorrespondingStdVariant {
1647#ifdef BSLS_LIBRARYFEATURES_HAS_CPP17_BASELINE_LIBRARY
1648template <class t_HEAD, class... t_TAIL>
1649struct Variant_CorrespondingStdVariant<bsl::variant<t_HEAD, t_TAIL...>> {
1650 typedef std::variant<t_HEAD, t_TAIL...> type;
1662template <class t_VARIANT, class t_TYPE>
1663struct Variant_ConstructsFromType
1664: bsl::integral_constant<
1666 !bsl::is_same<typename bsl::remove_cvref<t_TYPE>::type,
1667 t_VARIANT>::value &&
1668 !Variant_IsTag<typename bsl::remove_cvref<t_TYPE>::type>::value &&
1670 typename Variant_CorrespondingStdVariant<t_VARIANT>::type,
1671 typename bsl::remove_cvref<t_TYPE>::type>::value &&
1672 Variant_IsAlternativeConstructibleFrom<t_VARIANT, t_TYPE>::value> {
1682template <class t_VARIANT, class t_TYPE>
1683struct Variant_AssignsFromType
1684: bsl::integral_constant<
1686 !bsl::is_same<typename bsl::remove_cvref<t_TYPE>::type,
1687 t_VARIANT>::value &&
1688 Variant_IsAlternativeConstructibleFrom<t_VARIANT, t_TYPE>::value &&
1689 Variant_isAlternativeAssignableFrom<t_VARIANT, t_TYPE>::value> {
1692#ifdef BSLS_LIBRARYFEATURES_HAS_CPP17_BASELINE_LIBRARY
1704template <class t_VARIANT, class t_STD_VARIANT>
1705constexpr bool variant_constructsFromStd =
1707 bsl::is_same<typename Variant_CorrespondingStdVariant<t_VARIANT>::type,
1708 bsl::remove_cvref_t<t_STD_VARIANT>>,
1709 std::is_constructible<bsl::remove_cvref_t<t_STD_VARIANT>,
1713#ifdef BSL_VARIANT_FULL_IMPLEMENTATION
1722template <bool t_ISCOPYCONSTRUCTIBLE>
1723struct Variant_CopyConstructorBase {
1726struct Variant_CopyConstructorBase<false> {
1727 Variant_CopyConstructorBase() = default;
1728 Variant_CopyConstructorBase(const Variant_CopyConstructorBase&) = delete;
1729 Variant_CopyConstructorBase(Variant_CopyConstructorBase&&) = default;
1730 Variant_CopyConstructorBase&
1731 operator=(const Variant_CopyConstructorBase&) = default;
1732 Variant_CopyConstructorBase&
1733 operator=(Variant_CopyConstructorBase&&) = default;
1739template <bool t_ISCOPYCONSTRUCTIBLE, bool t_ISMOVECONSTRUCTIBLE>
1740struct Variant_MoveConstructorBase
1741: Variant_CopyConstructorBase<t_ISCOPYCONSTRUCTIBLE> {
1743template <bool t_ISCOPYCONSTRUCTIBLE>
1744struct Variant_MoveConstructorBase<t_ISCOPYCONSTRUCTIBLE, false>
1745: Variant_CopyConstructorBase<t_ISCOPYCONSTRUCTIBLE> {
1746 Variant_MoveConstructorBase() = default;
1747 Variant_MoveConstructorBase(const Variant_MoveConstructorBase&) = default;
1748 Variant_MoveConstructorBase(Variant_MoveConstructorBase&&) = delete;
1749 Variant_MoveConstructorBase&
1750 operator=(const Variant_MoveConstructorBase&) = default;
1751 Variant_MoveConstructorBase&
1752 operator=(Variant_MoveConstructorBase&&) = default;
1758template <bool t_ISCOPYCONSTRUCTIBLE,
1759 bool t_ISMOVECONSTRUCTIBLE,
1760 bool t_ISCOPYASSIGNABLE>
1761struct Variant_CopyAssignBase
1762: Variant_MoveConstructorBase<t_ISCOPYCONSTRUCTIBLE, t_ISMOVECONSTRUCTIBLE> {
1764template <bool t_ISCOPYCONSTRUCTIBLE, bool t_ISMOVECONSTRUCTIBLE>
1765struct Variant_CopyAssignBase<t_ISCOPYCONSTRUCTIBLE,
1766 t_ISMOVECONSTRUCTIBLE,
1768: Variant_MoveConstructorBase<t_ISCOPYCONSTRUCTIBLE, t_ISMOVECONSTRUCTIBLE> {
1769 Variant_CopyAssignBase() = default;
1770 Variant_CopyAssignBase(const Variant_CopyAssignBase&) = default;
1771 Variant_CopyAssignBase(Variant_CopyAssignBase&&) = default;
1772 Variant_CopyAssignBase& operator=(const Variant_CopyAssignBase&) = delete;
1773 Variant_CopyAssignBase& operator=(Variant_CopyAssignBase&&) = default;
1779template <bool t_ISCOPYCONSTRUCTIBLE,
1780 bool t_ISMOVECONSTRUCTIBLE,
1781 bool t_ISCOPYASSIGNABLE,
1782 bool t_ISMOVEASSIGNABLE>
1783struct Variant_MoveAssignBase : Variant_CopyAssignBase<t_ISCOPYCONSTRUCTIBLE,
1784 t_ISMOVECONSTRUCTIBLE,
1785 t_ISCOPYASSIGNABLE> {
1787template <bool t_ISCOPYCONSTRUCTIBLE,
1788 bool t_ISMOVECONSTRUCTIBLE,
1789 bool t_ISCOPYASSIGNABLE>
1790struct Variant_MoveAssignBase<t_ISCOPYCONSTRUCTIBLE,
1791 t_ISMOVECONSTRUCTIBLE,
1794: Variant_CopyAssignBase<t_ISCOPYCONSTRUCTIBLE,
1795 t_ISMOVECONSTRUCTIBLE,
1796 t_ISCOPYASSIGNABLE> {
1797 Variant_MoveAssignBase() = default;
1798 Variant_MoveAssignBase(const Variant_MoveAssignBase&) = default;
1799 Variant_MoveAssignBase(Variant_MoveAssignBase&&) = default;
1800 Variant_MoveAssignBase& operator=(const Variant_MoveAssignBase&) = default;
1801 Variant_MoveAssignBase& operator=(Variant_MoveAssignBase&&) = delete;
1807template <bool t_ISCOPYCONSTRUCTIBLE,
1808 bool t_ISMOVECONSTRUCTIBLE,
1809 bool t_ISCOPYASSIGNABLE,
1810 bool t_ISMOVEASSIGNABLE>
1811struct Variant_SMFBase : Variant_MoveAssignBase<t_ISCOPYCONSTRUCTIBLE,
1812 t_ISMOVECONSTRUCTIBLE,
1814 t_ISMOVEASSIGNABLE> {
1820template <class t_HEAD, class... t_TAIL>
1821struct Variant_IsCopyConstructibleAll
1822: bsl::integral_constant<
1824 std::is_copy_constructible<t_HEAD>::value &&
1825 Variant_IsCopyConstructibleAll<t_TAIL...>::value> {
1828template <class t_HEAD>
1829struct Variant_IsCopyConstructibleAll<t_HEAD>
1830: std::is_copy_constructible<t_HEAD> {
1836template <class t_HEAD, class... t_TAIL>
1837struct Variant_IsMoveConstructibleAll
1838: bsl::integral_constant<
1840 std::is_move_constructible<t_HEAD>::value &&
1841 Variant_IsMoveConstructibleAll<t_TAIL...>::value> {
1844template <class t_HEAD>
1845struct Variant_IsMoveConstructibleAll<t_HEAD>
1846: std::is_move_constructible<t_HEAD> {
1852template <class t_HEAD, class... t_TAIL>
1853struct Variant_IsCopyAssignableAll
1854: bsl::integral_constant<bool,
1855 std::is_copy_assignable<t_HEAD>::value &&
1856 Variant_IsCopyAssignableAll<t_TAIL...>::value> {
1859template <class t_HEAD>
1860struct Variant_IsCopyAssignableAll<t_HEAD> : std::is_copy_assignable<t_HEAD> {
1866template <class t_HEAD, class... t_TAIL>
1867struct Variant_IsMoveAssignableAll
1868: bsl::integral_constant<bool,
1869 std::is_move_assignable<t_HEAD>::value &&
1870 Variant_IsMoveAssignableAll<t_TAIL...>::value> {
1873template <class t_HEAD>
1874struct Variant_IsMoveAssignableAll<t_HEAD> : std::is_move_assignable<t_HEAD> {
1878#ifdef BSL_VARIANT_FULL_IMPLEMENTATION
1879template <class t_RET, class t_VISITOR, class t_VARIANT, size_t t_INDEX>
1880struct Variant_Function {
1888 static t_RET functionImpl(t_VISITOR&& visitor, t_VARIANT&& variant)
1890#ifdef BSLS_LIBRARYFEATURES_HAS_CPP17_BASELINE_LIBRARY
1892 std::forward<t_VISITOR>(visitor),
1893 bsl::get<t_INDEX>(std::forward<t_VARIANT>(variant)));
1895 return std::forward<t_VISITOR>(visitor)(
1896 bsl::get<t_INDEX>(std::forward<t_VARIANT>(variant)));
1905template <class t_VISITOR, class t_VARIANT, size_t t_INDEX>
1906struct Variant_Function<void, t_VISITOR, t_VARIANT, t_INDEX> {
1908 static void functionImpl(t_VISITOR&& visitor, t_VARIANT&& variant)
1910#ifdef BSLS_LIBRARYFEATURES_HAS_CPP17_BASELINE_LIBRARY
1911 std::invoke(std::forward<t_VISITOR>(visitor),
1912 bsl::get<t_INDEX>(std::forward<t_VARIANT>(variant)));
1914 std::forward<t_VISITOR>(visitor)(
1915 bsl::get<t_INDEX>(std::forward<t_VARIANT>(variant)));
1920template <class t_RET, class t_VISITOR, class t_VARIANT, size_t t_INDEX>
1921struct Variant_FunctionId {
1929 static t_RET functionImpl(t_VISITOR&& visitor, t_VARIANT&& variant)
1931 return visitor(bsl::in_place_index_t<t_INDEX>(),
1932 bsl::get<t_INDEX>(std::forward<t_VARIANT>(variant)));
1941template <class t_RET, class t_VISITOR, class t_VARIANT, class t_DUMMY>
1942struct Variant_VTable;
1946template <class t_RET, class t_VISITOR, class t_VARIANT, size_t... t_INDICES>
1947struct Variant_VTable<t_RET,
1950 bslmf::IntegerSequence<std::size_t, t_INDICES...> > {
1951 BSLMF_ASSERT(bsl::is_reference<t_VISITOR>::value);
1952 BSLMF_ASSERT(bsl::is_reference<t_VARIANT>::value);
1954 typedef t_RET (*FuncPtr)(t_VISITOR, t_VARIANT);
1956 static BSLS_KEYWORD_CONSTEXPR FuncPtr s_map[sizeof...(t_INDICES)] = {
1957 &(Variant_Function<t_RET, t_VISITOR, t_VARIANT, t_INDICES>::
1971template <class t_RET, class t_VISITOR, class t_VARIANT, class t_DUMMY>
1972struct Variant_VTableId;
1976template <class t_RET, class t_VISITOR, class t_VARIANT, size_t... t_INDICES>
1977struct Variant_VTableId<t_RET,
1980 bslmf::IntegerSequence<std::size_t, t_INDICES...> > {
1981 BSLMF_ASSERT(bsl::is_reference<t_VISITOR>::value);
1982 BSLMF_ASSERT(bsl::is_reference<t_VARIANT>::value);
1984 typedef t_RET (*FuncPtr)(t_VISITOR, t_VARIANT);
1986 static BSLS_KEYWORD_CONSTEXPR FuncPtr s_mapId[sizeof...(t_INDICES)] = {
1987 &(Variant_FunctionId<t_RET, t_VISITOR, t_VARIANT, t_INDICES>::
1991# if !defined(BSLS_COMPILERFEATURES_SUPPORT_INLINE_VARIABLES)
1993template <class t_RET, class t_VISITOR, class t_VARIANT, size_t... t_INDICES>
1994BSLS_KEYWORD_CONSTEXPR typename Variant_VTable<
1998 bslmf::IntegerSequence<std::size_t, t_INDICES...> >::FuncPtr
1999 Variant_VTable<t_RET,
2002 bslmf::IntegerSequence<std::size_t, t_INDICES...> >::s_map
2003 [sizeof...(t_INDICES)];
2005template <class t_RET, class t_VISITOR, class t_VARIANT, size_t... t_INDICES>
2006BSLS_KEYWORD_CONSTEXPR typename Variant_VTableId<
2010 bslmf::IntegerSequence<std::size_t, t_INDICES...> >::FuncPtr
2011 Variant_VTableId<t_RET,
2014 bslmf::IntegerSequence<std::size_t, t_INDICES...> >::
2015 s_mapId[sizeof...(t_INDICES)];
2018#if !BSLS_COMPILERFEATURES_SIMULATE_CPP11_FEATURES
2020template <class t_RET, class t_VISITOR, class t_VARIANT, class t_ALT_TYPE>
2021struct Variant_Function {
2028 static t_RET functionImpl(t_VISITOR& visitor, t_VARIANT& variant)
2030 typedef BloombergLP::bslstl::Variant_ImpUtil ImpUtil;
2031 return visitor(ImpUtil::unsafeGet<t_ALT_TYPE>(variant));
2039template <class t_VISITOR, class t_VARIANT, class t_ALT_TYPE>
2040struct Variant_Function<void, t_VISITOR, t_VARIANT, t_ALT_TYPE> {
2042 static void functionImpl(t_VISITOR& visitor, t_VARIANT& variant)
2044 typedef BloombergLP::bslstl::Variant_ImpUtil ImpUtil;
2045 visitor(ImpUtil::unsafeGet<t_ALT_TYPE>(variant));
2049template <class t_RET, class t_VISITOR, class t_VARIANT, class t_ALT_TYPE>
2050struct Variant_MoveFunction {
2058 static t_RET functionImpl(t_VISITOR& visitor, t_VARIANT& variant)
2060 typedef BloombergLP::bslmf::MovableRefUtil MoveUtil;
2061 typedef BloombergLP::bslstl::Variant_ImpUtil ImpUtil;
2064 MoveUtil::move(ImpUtil::unsafeGet<t_ALT_TYPE>(variant)));
2072template <class t_VISITOR, class t_VARIANT, class t_ALT_TYPE>
2073struct Variant_MoveFunction<void, t_VISITOR, t_VARIANT, t_ALT_TYPE> {
2075 static void functionImpl(t_VISITOR& visitor, t_VARIANT& variant)
2077 typedef BloombergLP::bslmf::MovableRefUtil MoveUtil;
2078 typedef BloombergLP::bslstl::Variant_ImpUtil ImpUtil;
2080 visitor(MoveUtil::move(ImpUtil::unsafeGet<t_ALT_TYPE>(variant)));
2084template <class t_RET, class t_VISITOR, class t_VARIANT, class t_ALT_TYPE>
2085struct Variant_FunctionId {
2097 static t_RET functionImpl(t_VISITOR& visitor, t_VARIANT& variant)
2099 typedef BloombergLP::bslstl::Variant_ImpUtil ImpUtil;
2100 static const size_t t_INDEX = BSLSTL_VARIANT_INDEX_OF(
2101 t_ALT_TYPE, typename bsl::remove_cv<t_VARIANT>::type);
2103 return visitor(bsl::in_place_index_t<t_INDEX>(),
2104 ImpUtil::unsafeGet<t_ALT_TYPE>(variant));
2116template <class t_RET, class t_VISITOR, class t_VARIANT, class... t_UNUSED>
2117struct Variant_VTable;
2120template <class t_RET, class t_VISITOR, class t_HEAD, class... t_TAIL>
2121struct Variant_VTable<t_RET, t_VISITOR, bsl::variant<t_HEAD, t_TAIL...> > {
2123 typedef t_RET (*FuncPtr)(t_VISITOR&, bsl::variant<t_HEAD, t_TAIL...>&);
2125 typedef bsl::variant<t_HEAD, t_TAIL...> Variant;
2130 static const FuncPtr *map()
2132 static const FuncPtr s_mapArray[] = {
2133 &(Variant_Function<t_RET, t_VISITOR, Variant, t_HEAD>::
2135 &(Variant_Function<t_RET, t_VISITOR, Variant, t_TAIL>::
2143 static const FuncPtr *moveMap()
2145 static const FuncPtr s_mapArray[] = {
2146 &(Variant_MoveFunction<t_RET, t_VISITOR, Variant, t_HEAD>::
2148 &(Variant_MoveFunction<t_RET, t_VISITOR, Variant, t_TAIL>::
2157 static const FuncPtr *mapId()
2159 static const FuncPtr s_mapArray[] = {
2160 &(Variant_FunctionId<t_RET, t_VISITOR, Variant, t_HEAD>::
2162 &(Variant_FunctionId<t_RET, t_VISITOR, Variant, t_TAIL>::
2169template <class t_RET, class t_VISITOR, class t_HEAD, class... t_TAIL>
2170struct Variant_VTable<t_RET,
2172 const bsl::variant<t_HEAD, t_TAIL...> > {
2174 typedef t_RET (*FuncPtr)(t_VISITOR&,
2175 const bsl::variant<t_HEAD, t_TAIL...>&);
2177 typedef const bsl::variant<t_HEAD, t_TAIL...> Variant;
2182 static const FuncPtr *map()
2184 static const FuncPtr s_mapArray[] = {
2185 &(Variant_Function<t_RET, t_VISITOR, Variant, t_HEAD>::
2187 &(Variant_Function<t_RET, t_VISITOR, Variant, t_TAIL>::
2196 static const FuncPtr *mapId()
2198 static const FuncPtr s_mapArray[] = {
2199 &(Variant_FunctionId<t_RET, t_VISITOR, Variant, t_HEAD>::
2201 &(Variant_FunctionId<t_RET, t_VISITOR, Variant, t_TAIL>::
2214#ifdef BSL_VARIANT_FULL_IMPLEMENTATION
2230template <class t_RET, class t_VISITOR, class t_VARIANT>
2231t_RET visit(t_VISITOR&& visitor, t_VARIANT&& variant)
2233 typedef BloombergLP::bslstl::Variant_ImpUtil ImpUtil;
2235 if (variant.valueless_by_exception()) {
2236 BSLS_THROW(bsl::bad_variant_access());
2238 return ImpUtil::visit<t_RET>(std::forward<t_VISITOR>(visitor),
2240 std::forward<t_VARIANT>(variant)));
2254template <class t_VISITOR, class t_VARIANT>
2255auto visit(t_VISITOR&& visitor, t_VARIANT&& variant) ->
2258 decltype(get<0>(BloombergLP::bslstl::Variant_ImpUtil::
2259 asVariant(std::forward<t_VARIANT>(variant))))>::type
2261 typedef BloombergLP::bslstl::Variant_ImpUtil ImpUtil;
2262 typedef decltype(ImpUtil::asVariant(std::forward<t_VARIANT>(variant)))
2266 decltype(get<0>(ImpUtil::
2267 asVariant(std::forward<t_VARIANT>(variant))))>::type RET;
2270 BloombergLP::bslstl::
2271 Variant_IsSameReturnType<RET, t_VISITOR&&, VariantFwdRefType>::value,
2272 "The value type and category of invoking the visitor with "
2273 "every alternative is not the same");
2274 if (variant.valueless_by_exception()) {
2277 return ImpUtil::visit<RET>(std::forward<t_VISITOR>(visitor),
2279 std::forward<t_VARIANT>(variant)));
2290template <
class t_RET,
class t_VISITOR,
class t_VARIANT>
2291t_RET
visitR(t_VISITOR& visitor, t_VARIANT&& variant)
2293 typedef BloombergLP::bslstl::Variant_ImpUtil ImpUtil;
2294 return visit<t_RET>(visitor,
2295 ImpUtil::asVariant(std::forward<t_VARIANT>(variant)));
2312template <
class t_RET,
class t_VISITOR,
class t_VARIANT>
2315 typedef BloombergLP::bslstl::Variant_ImpUtil ImpUtil;
2320 return ImpUtil::visit<t_RET>(visitor, ImpUtil::asVariant(
variant));
2337template <
class t_RET,
class t_VISITOR,
class t_VARIANT>
2339 BloombergLP::bslmf::MovableRef<t_VARIANT>
variant)
2341 typedef BloombergLP::bslstl::Variant_ImpUtil ImpUtil;
2344 if (lvalue.valueless_by_exception()) {
2347 return ImpUtil::moveVisit<t_RET>(visitor, ImpUtil::asVariant(lvalue));
2355template <
class t_VISITOR,
class t_VARIANT>
2361 typedef BloombergLP::bslstl::Variant_ImpUtil ImpUtil;
2371 (BloombergLP::bslstl::
2372 Variant_IsSameReturnType<Ret, t_VISITOR, t_VARIANT&>::value));
2374 return ImpUtil::visit<Ret>(visitor, ImpUtil::asVariant(
variant));
2383template <
class t_VISITOR,
class t_VARIANT>
2386 BloombergLP::bslmf::MovableRef<
2388visit(t_VISITOR& visitor, BloombergLP::bslmf::MovableRef<t_VARIANT>
variant)
2390 typedef BloombergLP::bslstl::Variant_ImpUtil ImpUtil;
2393 if (lvalue.valueless_by_exception()) {
2398 BloombergLP::bslmf::MovableRef<
2401 BSLMF_ASSERT((BloombergLP::bslstl::Variant_IsSameReturnType<
2404 BloombergLP::bslmf::MovableRef<t_VARIANT> >::value));
2406 return ImpUtil::moveVisit<Ret>(visitor, ImpUtil::asVariant(lvalue));
2443#ifdef BSL_VARIANT_FULL_IMPLEMENTATION
2451template <
class t_TYPE>
2473 template <
class... t_ARGS>
2498template <class... t_TYPES>
2504template <
class t_HEAD,
class... t_TAIL>
2505union Variant_Union<t_HEAD, t_TAIL...> {
2508 Variant_DataImp<t_HEAD> d_head;
2509 Variant_Union<t_TAIL...> d_tail;
2514 Variant_Union() =
default;
2518 template <
class... t_ARGS>
2520 : d_head(
std::forward<t_ARGS>(args)...)
2531 template <
size_t t_INDEX,
class... t_ARGS>
2533 : d_tail(
bsl::in_place_index_t<t_INDEX - 1>(),
2534 std::forward<t_ARGS>(args)...)
2546template <class t_TYPE>
2581#if !BSLS_COMPILERFEATURES_SIMULATE_CPP11_FEATURES
2588template <
class t_HEAD = void,
class... t_TAIL0 = void,
class... t_TAIL>
2604template <
class t_HEAD,
class t_TAIL0,
class... t_TAIL>
2622template <
class t_VARIANT_BASE>
2627 t_VARIANT_BASE *d_variant_p;
2635 : d_variant_p(variant)
2647 template <
size_t t_INDEX,
class t_TYPE>
2650 d_variant_p->template baseEmplace<t_INDEX>(other);
2662template <
class t_VARIANT_BASE>
2667 typedef BloombergLP::bslmf::MovableRefUtil MoveUtil;
2670 t_VARIANT_BASE *d_variant_p;
2678 : d_variant_p(variant)
2690 template <
size_t t_INDEX,
class t_TYPE>
2693 d_variant_p->template baseEmplace<t_INDEX>(MoveUtil::move(other));
2705template <
class t_VARIANT>
2710 t_VARIANT *d_variant_p;
2718 : d_variant_p(variant)
2734 template <
size_t t_INDEX,
class t_TYPE>
2737#ifdef BSL_VARIANT_FULL_IMPLEMENTATION
2738 bsl::get<t_INDEX>(*d_variant_p) = value;
2747 typedef BloombergLP::bslstl::Variant_ImpUtil ImpUtil;
2749 ImpUtil::unsafeGet<Alt_Type>(*d_variant_p) = value;
2762template <
class t_VARIANT>
2767 typedef BloombergLP::bslmf::MovableRefUtil MoveUtil;
2770 t_VARIANT *d_variant_p;
2778 : d_variant_p(variant)
2793 template <
size_t t_INDEX,
class t_TYPE>
2796#ifdef BSL_VARIANT_FULL_IMPLEMENTATION
2797 bsl::get<t_INDEX>(*d_variant_p) = MoveUtil::move(value);
2799 typedef BloombergLP::bslstl::Variant_ImpUtil ImpUtil;
2800 ImpUtil::unsafeGet<t_TYPE>(*d_variant_p) = MoveUtil::move(value);
2820 template <
class t_TYPE>
2823 bslma::DestructionUtil::destroy(&
object);
2831#ifdef BSL_VARIANT_FULL_IMPLEMENTATION
2832#define BSLSTL_VARIANT_RELOP_VISITOR_DEFINITON(NAME, OP) \
2833 template <class t_VARIANT> \
2834 struct Variant_##NAME##Visitor { \
2837 explicit Variant_##NAME##Visitor(const t_VARIANT *variant) \
2838 : d_variant_p(variant) \
2840 BSLS_ASSERT_SAFE(d_variant_p); \
2844 const t_VARIANT *d_variant_p; \
2847 template <size_t t_INDEX, class t_TYPE> \
2848 bool operator()(bsl::in_place_index_t<t_INDEX>, \
2849 const t_TYPE& value) const \
2851 return (bsl::get<t_INDEX>(*d_variant_p) OP value); \
2855 template <class t_VARIANT> \
2856 bool Variant_ImpUtil::NAME(const t_VARIANT& lhs, const t_VARIANT& rhs) \
2858 BSLS_ASSERT(lhs.index() == rhs.index() && \
2859 !lhs.valueless_by_exception()); \
2861 Variant_##NAME##Visitor<t_VARIANT> NAME##Visitor( \
2862 BSLS_UTIL_ADDRESSOF(lhs)); \
2863 return BSLSTL_VARIANT_VISITID(bool, NAME##Visitor, rhs); \
2866#define BSLSTL_VARIANT_RELOP_VISITOR_DEFINITON(NAME, OP) \
2867 template <class t_VARIANT> \
2868 struct Variant_##NAME##Visitor { \
2869 Variant_##NAME##Visitor(const t_VARIANT *variant) \
2870 : d_variant_p(variant) \
2872 BSLS_ASSERT_SAFE(d_variant_p); \
2876 const t_VARIANT *d_variant_p; \
2879 template <size_t t_INDEX, class t_TYPE> \
2880 bool operator()(bsl::in_place_index_t<t_INDEX>, \
2881 t_TYPE& value) const \
2890 typename bsl::variant_alternative<t_INDEX, t_VARIANT>::type \
2892 typedef BloombergLP::bslstl::Variant_ImpUtil ImpUtil; \
2893 return (ImpUtil::unsafeGet<Alt_Type>(*d_variant_p) OP value); \
2897 template <class t_VARIANT> \
2898 bool Variant_ImpUtil::NAME(const t_VARIANT& lhs, const t_VARIANT& rhs) \
2900 BSLS_ASSERT(lhs.index() == rhs.index() && \
2901 !lhs.valueless_by_exception()); \
2903 Variant_##NAME##Visitor<t_VARIANT> NAME##Visitor( \
2904 BSLS_UTIL_ADDRESSOF(lhs)); \
2905 return BSLSTL_VARIANT_VISITID(bool, NAME##Visitor, rhs); \
2925template <class t_VARIANT>
2930 t_VARIANT *d_variant_p;
2939 : d_variant_p(variant)
2953 template <
size_t t_INDEX,
class t_TYPE>
2956#ifdef BSL_VARIANT_FULL_IMPLEMENTATION
2957 BloombergLP::bslalg::SwapUtil::swap(
2961 typedef BloombergLP::bslstl::Variant_ImpUtil ImpUtil;
2966 BloombergLP::bslalg::SwapUtil::swap(
2981template <
class t_HASHALG>
2986 t_HASHALG& d_hashAlg;
2994 : d_hashAlg(hashAlg)
3002 template <
class t_TYPE>
3005 using BloombergLP::bslh::hashAppend;
3006 hashAppend(d_hashAlg, value);
3055 : d_allocator(original.d_allocator)
3062 : d_allocator(allocator)
3079#if !BSLS_COMPILERFEATURES_SIMULATE_CPP11_FEATURES
3086template <
class t_HEAD,
class... t_TAIL>
3088:
public BloombergLP::bslstl::Variant_AllocatorBase<
3089 BloombergLP::bslstl::Variant_UsesBslmaAllocatorAny<t_HEAD,
3090 t_TAIL...>::value> {
3094 typedef BloombergLP::bslstl::Variant_AllocatorBase<
3095 BloombergLP::bslstl::Variant_UsesBslmaAllocatorAny<t_HEAD,
3098 typedef BloombergLP::bslstl::Variant_Union<t_HEAD, t_TAIL...>
3111 BloombergLP::bslstl::Variant_UsesBslmaAllocatorAny<t_HEAD,
3128 BloombergLP::bslma::UsesBslmaAllocator,
3129 (BloombergLP::bslstl::
3133 BloombergLP::bslmf::UsesAllocatorArgT,
3134 (BloombergLP::bslstl::
3138 BloombergLP::bslmf::IsBitwiseMoveable,
3139 (BloombergLP::bslstl::Variant_IsBitwiseMoveableAll<t_HEAD,
3140 t_TAIL...>::value));
3143#ifdef BSL_VARIANT_FULL_IMPLEMENTATION
3166#ifdef BSLS_LIBRARYFEATURES_HAS_CPP17_BASELINE_LIBRARY
3177 template <
size_t t_INDEX,
class... t_ARGS>
3200#ifdef BSLS_LIBRARYFEATURES_HAS_CPP17_BASELINE_LIBRARY
3215 template <
size_t t_INDEX,
class... t_ARGS>
3242 Variant_Base(BloombergLP::bslmf::MovableRef<Variant> original);
3248 template <
size_t t_INDEX>
3255 template <
size_t t_INDEX,
class t_ARG_01>
3257 const t_ARG_01& arg_01);
3259 template <
size_t t_INDEX,
class t_ARG_01,
class t_ARG_02>
3261 const t_ARG_01& arg_01,
3262 const t_ARG_02& arg_02);
3264 template <
size_t t_INDEX,
class t_ARG_01,
class t_ARG_02,
class t_ARG_03>
3266 const t_ARG_01& arg_01,
3267 const t_ARG_02& arg_02,
3268 const t_ARG_03& arg_03);
3270 template <
size_t t_INDEX,
3276 const t_ARG_01& arg_01,
3277 const t_ARG_02& arg_02,
3278 const t_ARG_03& arg_03,
3279 const t_ARG_04& arg_04);
3281 template <
size_t t_INDEX,
3288 const t_ARG_01& arg_01,
3289 const t_ARG_02& arg_02,
3290 const t_ARG_03& arg_03,
3291 const t_ARG_04& arg_04,
3292 const t_ARG_05& arg_05);
3294 template <
size_t t_INDEX,
3302 const t_ARG_01& arg_01,
3303 const t_ARG_02& arg_02,
3304 const t_ARG_03& arg_03,
3305 const t_ARG_04& arg_04,
3306 const t_ARG_05& arg_05,
3307 const t_ARG_06& arg_06);
3309 template <
size_t t_INDEX,
3318 const t_ARG_01& arg_01,
3319 const t_ARG_02& arg_02,
3320 const t_ARG_03& arg_03,
3321 const t_ARG_04& arg_04,
3322 const t_ARG_05& arg_05,
3323 const t_ARG_06& arg_06,
3324 const t_ARG_07& arg_07);
3326 template <
size_t t_INDEX,
3336 const t_ARG_01& arg_01,
3337 const t_ARG_02& arg_02,
3338 const t_ARG_03& arg_03,
3339 const t_ARG_04& arg_04,
3340 const t_ARG_05& arg_05,
3341 const t_ARG_06& arg_06,
3342 const t_ARG_07& arg_07,
3343 const t_ARG_08& arg_08);
3345 template <
size_t t_INDEX,
3356 const t_ARG_01& arg_01,
3357 const t_ARG_02& arg_02,
3358 const t_ARG_03& arg_03,
3359 const t_ARG_04& arg_04,
3360 const t_ARG_05& arg_05,
3361 const t_ARG_06& arg_06,
3362 const t_ARG_07& arg_07,
3363 const t_ARG_08& arg_08,
3364 const t_ARG_09& arg_09);
3366 template <
size_t t_INDEX,
3378 const t_ARG_01& arg_01,
3379 const t_ARG_02& arg_02,
3380 const t_ARG_03& arg_03,
3381 const t_ARG_04& arg_04,
3382 const t_ARG_05& arg_05,
3383 const t_ARG_06& arg_06,
3384 const t_ARG_07& arg_07,
3385 const t_ARG_08& arg_08,
3386 const t_ARG_09& arg_09,
3387 const t_ARG_10& arg_10);
3407 BloombergLP::bslmf::MovableRef<Variant> original);
3413 template <
size_t t_INDEX>
3422 template <
size_t t_INDEX,
class t_ARG_01>
3426 const t_ARG_01& arg_01);
3428 template <
size_t t_INDEX,
class t_ARG_01,
class t_ARG_02>
3432 const t_ARG_01& arg_01,
3433 const t_ARG_02& arg_02);
3435 template <
size_t t_INDEX,
class t_ARG_01,
class t_ARG_02,
class t_ARG_03>
3439 const t_ARG_01& arg_01,
3440 const t_ARG_02& arg_02,
3441 const t_ARG_03& arg_03);
3443 template <
size_t t_INDEX,
3451 const t_ARG_01& arg_01,
3452 const t_ARG_02& arg_02,
3453 const t_ARG_03& arg_03,
3454 const t_ARG_04& arg_04);
3456 template <
size_t t_INDEX,
3465 const t_ARG_01& arg_01,
3466 const t_ARG_02& arg_02,
3467 const t_ARG_03& arg_03,
3468 const t_ARG_04& arg_04,
3469 const t_ARG_05& arg_05);
3471 template <
size_t t_INDEX,
3481 const t_ARG_01& arg_01,
3482 const t_ARG_02& arg_02,
3483 const t_ARG_03& arg_03,
3484 const t_ARG_04& arg_04,
3485 const t_ARG_05& arg_05,
3486 const t_ARG_06& arg_06);
3488 template <
size_t t_INDEX,
3499 const t_ARG_01& arg_01,
3500 const t_ARG_02& arg_02,
3501 const t_ARG_03& arg_03,
3502 const t_ARG_04& arg_04,
3503 const t_ARG_05& arg_05,
3504 const t_ARG_06& arg_06,
3505 const t_ARG_07& arg_07);
3507 template <
size_t t_INDEX,
3519 const t_ARG_01& arg_01,
3520 const t_ARG_02& arg_02,
3521 const t_ARG_03& arg_03,
3522 const t_ARG_04& arg_04,
3523 const t_ARG_05& arg_05,
3524 const t_ARG_06& arg_06,
3525 const t_ARG_07& arg_07,
3526 const t_ARG_08& arg_08);
3528 template <
size_t t_INDEX,
3541 const t_ARG_01& arg_01,
3542 const t_ARG_02& arg_02,
3543 const t_ARG_03& arg_03,
3544 const t_ARG_04& arg_04,
3545 const t_ARG_05& arg_05,
3546 const t_ARG_06& arg_06,
3547 const t_ARG_07& arg_07,
3548 const t_ARG_08& arg_08,
3549 const t_ARG_09& arg_09);
3551 template <
size_t t_INDEX,
3565 const t_ARG_01& arg_01,
3566 const t_ARG_02& arg_02,
3567 const t_ARG_03& arg_03,
3568 const t_ARG_04& arg_04,
3569 const t_ARG_05& arg_05,
3570 const t_ARG_06& arg_06,
3571 const t_ARG_07& arg_07,
3572 const t_ARG_08& arg_08,
3573 const t_ARG_09& arg_09,
3574 const t_ARG_10& arg_10);
3582#ifdef BSL_VARIANT_FULL_IMPLEMENTATION
3595 template <
size_t t_INDEX,
class... t_ARGS>
3596 void baseEmplace(t_ARGS&&...);
3609 template <size_t t_INDEX>
3623 template <
size_t t_INDEX,
class t_ARG_01>
3624 void baseEmplace(
const t_ARG_01& arg_01);
3626 template <
size_t t_INDEX,
class t_ARG_01,
class t_ARG_02>
3627 void baseEmplace(
const t_ARG_01& arg_01,
const t_ARG_02& arg_02);
3629 template <
size_t t_INDEX,
class t_ARG_01,
class t_ARG_02,
class t_ARG_03>
3630 void baseEmplace(
const t_ARG_01& arg_01,
3631 const t_ARG_02& arg_02,
3632 const t_ARG_03& arg_03);
3634 template <
size_t t_INDEX,
3639 void baseEmplace(
const t_ARG_01& arg_01,
3640 const t_ARG_02& arg_02,
3641 const t_ARG_03& arg_03,
3642 const t_ARG_04& arg_04);
3644 template <
size_t t_INDEX,
3650 void baseEmplace(
const t_ARG_01& arg_01,
3651 const t_ARG_02& arg_02,
3652 const t_ARG_03& arg_03,
3653 const t_ARG_04& arg_04,
3654 const t_ARG_05& arg_05);
3656 template <
size_t t_INDEX,
3663 void baseEmplace(
const t_ARG_01& arg_01,
3664 const t_ARG_02& arg_02,
3665 const t_ARG_03& arg_03,
3666 const t_ARG_04& arg_04,
3667 const t_ARG_05& arg_05,
3668 const t_ARG_06& arg_06);
3670 template <
size_t t_INDEX,
3678 void baseEmplace(
const t_ARG_01& arg_01,
3679 const t_ARG_02& arg_02,
3680 const t_ARG_03& arg_03,
3681 const t_ARG_04& arg_04,
3682 const t_ARG_05& arg_05,
3683 const t_ARG_06& arg_06,
3684 const t_ARG_07& arg_07);
3686 template <
size_t t_INDEX,
3695 void baseEmplace(
const t_ARG_01& arg_01,
3696 const t_ARG_02& arg_02,
3697 const t_ARG_03& arg_03,
3698 const t_ARG_04& arg_04,
3699 const t_ARG_05& arg_05,
3700 const t_ARG_06& arg_06,
3701 const t_ARG_07& arg_07,
3702 const t_ARG_08& arg_08);
3704 template <
size_t t_INDEX,
3714 void baseEmplace(
const t_ARG_01& arg_01,
3715 const t_ARG_02& arg_02,
3716 const t_ARG_03& arg_03,
3717 const t_ARG_04& arg_04,
3718 const t_ARG_05& arg_05,
3719 const t_ARG_06& arg_06,
3720 const t_ARG_07& arg_07,
3721 const t_ARG_08& arg_08,
3722 const t_ARG_09& arg_09);
3724 template <
size_t t_INDEX,
3735 void baseEmplace(
const t_ARG_01& arg_01,
3736 const t_ARG_02& arg_02,
3737 const t_ARG_03& arg_03,
3738 const t_ARG_04& arg_04,
3739 const t_ARG_05& arg_05,
3740 const t_ARG_06& arg_06,
3741 const t_ARG_07& arg_07,
3742 const t_ARG_08& arg_08,
3743 const t_ARG_09& arg_09,
3744 const t_ARG_10& arg_10);
3771 Variant_Base& operator=(BloombergLP::bslmf::MovableRef<Variant_Base> rhs);
3786#if !BSLS_COMPILERFEATURES_SIMULATE_CPP11_FEATURES
3787template <
class t_HEAD,
class... t_TAIL>
3789:
private BloombergLP::bslstl::Variant_Base<t_HEAD, t_TAIL...>
3790#ifdef BSL_VARIANT_FULL_IMPLEMENTATION
3792 private BloombergLP::bslstl::Variant_SMFBase<
3793 BloombergLP::bslstl::Variant_IsCopyConstructibleAll<t_HEAD,
3795 BloombergLP::bslstl::Variant_IsMoveConstructibleAll<t_HEAD,
3797 BloombergLP::bslstl::Variant_IsCopyConstructibleAll<t_HEAD,
3798 t_TAIL...>::value &&
3799 BloombergLP::bslstl::Variant_IsCopyAssignableAll<t_HEAD,
3801 BloombergLP::bslstl::Variant_IsMoveConstructibleAll<t_HEAD,
3802 t_TAIL...>::value &&
3803 BloombergLP::bslstl::Variant_IsMoveAssignableAll<t_HEAD,
3809 typedef BloombergLP::bslmf::MovableRefUtil MoveUtil;
3810 typedef BloombergLP::bslstl::Variant_Base<t_HEAD, t_TAIL...> Variant_Base;
3811 typedef BloombergLP::bslstl::Variant_Union<t_HEAD, t_TAIL...>
3815 friend struct BloombergLP::bslstl::Variant_ImpUtil;
3821 friend struct BloombergLP::bslstl::Variant_Base<t_HEAD, t_TAIL...>;
3829 BloombergLP::bslma::UsesBslmaAllocator,
3830 (BloombergLP::bslstl::
3831 Variant_UsesBslmaAllocatorAny<t_HEAD, t_TAIL...>::value));
3834 BloombergLP::bslmf::UsesAllocatorArgT,
3835 (BloombergLP::bslstl::
3836 Variant_UsesBslmaAllocatorAny<t_HEAD, t_TAIL...>::value));
3839 BloombergLP::bslmf::IsBitwiseMoveable,
3840 (BloombergLP::bslstl::Variant_IsBitwiseMoveableAll<t_HEAD,
3841 t_TAIL...>::value));
3851#ifdef BSL_VARIANT_FULL_IMPLEMENTATION
3861 template <
class t_FIRST_ALT = t_HEAD,
3862 class =
typename bsl::enable_if_t<
3863 std::is_default_constructible<t_FIRST_ALT>::value> >
3900#ifdef BSLS_LIBRARYFEATURES_HAS_CPP17_BASELINE_LIBRARY
3908 template <
class t_STD_VARIANT>
3910 t_STD_VARIANT&& original,
3912 : Variant_Base(BloombergLP::
bslstl::Variant_ConstructFromStdTag(),
3917 if (!valueless_by_exception()) {
3918 BloombergLP::bslstl::Variant_ImpUtil::
3919 ConstructFromStdVisitor<
variant,
decltype(original)>
3920 visitor(*
this, original);
3941 template <
class t_TYPE>
3954 template <
class t_TYPE,
3956 class =
typename bsl::enable_if_t<
3958 std::is_constructible<t_TYPE, t_ARGS...>::value> >
3962 std::forward<t_ARGS>(args)...)
3969 template <
class t_TYPE,
3970 class INIT_LIST_TYPE,
3972 class =
typename bsl::enable_if_t<
3974 std::is_constructible<t_TYPE,
3975 std::initializer_list<INIT_LIST_TYPE>&,
3976 t_ARGS...>::value> >
3978 std::initializer_list<INIT_LIST_TYPE> il,
3992 std::forward<t_ARGS>(args)...)
4009 template <
size_t t_INDEX,
4011 class =
typename bsl::enable_if_t<
4012 (t_INDEX < 1 +
sizeof...(t_TAIL)) &&
4014 t_ARGS...>::value> >
4016 : Variant_Base(
bsl::in_place_index_t<t_INDEX>(),
4017 std::forward<t_ARGS>(args)...)
4033 template <
size_t t_INDEX,
4034 class INIT_LIST_TYPE,
4036 class =
typename bsl::enable_if_t<
4037 (t_INDEX < 1 +
sizeof...(t_TAIL)) &&
4039 std::initializer_list<INIT_LIST_TYPE>&,
4040 t_ARGS...>::value> >
4042 std::initializer_list<INIT_LIST_TYPE> il,
4044 : Variant_Base(
bsl::in_place_index_t<t_INDEX>(),
4046 std::forward<t_ARGS>(args)...)
4060 template <
class t_FIRST = t_HEAD,
4061 class =
typename bsl::enable_if_t<
4062 std::is_default_constructible<t_FIRST>::value> >
4064 : Variant_Base(
bsl::allocator_arg_t(), allocator)
4078 class t_FIRST = t_HEAD,
4079 class =
typename bsl::enable_if_t<
4080 BloombergLP::bslstl::
4081 Variant_IsCopyConstructibleAll<t_FIRST, t_TAIL...>::value> >
4083 allocator_type allocator,
4084 const variant& original)
4085 : Variant_Base(
bsl::allocator_arg_t(), allocator, original)
4100 class t_FIRST = t_HEAD,
4101 class =
typename bsl::enable_if_t<
4102 BloombergLP::bslstl::
4103 Variant_IsMoveConstructibleAll<t_FIRST, t_TAIL...>::value> >
4105 : Variant_Base(
bsl::allocator_arg_t(), allocator,
std::move(original))
4112#ifdef BSLS_LIBRARYFEATURES_HAS_CPP17_BASELINE_LIBRARY
4120 template <
class t_STD_VARIANT>
4123 allocator_type allocator,
4124 t_STD_VARIANT&& original,
4126 : Variant_Base(
bsl::allocator_arg_t(),
4128 BloombergLP::
bslstl::Variant_ConstructFromStdTag(),
4133 if (!valueless_by_exception()) {
4134 BloombergLP::bslstl::Variant_ImpUtil::
4135 ConstructFromStdVisitor<variant,
decltype(original)>
4136 visitor(*
this, original);
4153 template <
class t_TYPE>
4156 allocator_type allocator,
4166 template <
class t_TYPE,
4168 class =
typename bsl::enable_if_t<
4170 std::is_constructible<t_TYPE, t_ARGS...>::value> >
4172 allocator_type allocator,
4176 bsl::allocator_arg_t{},
4179 std::forward<t_ARGS>(args)...)
4192 template <
class t_TYPE,
4193 class INIT_LIST_TYPE,
4195 class =
typename bsl::enable_if_t<
4197 std::is_constructible<t_TYPE,
4198 std::initializer_list<INIT_LIST_TYPE>&,
4199 t_ARGS...>::value> >
4201 allocator_type allocator,
4203 std::initializer_list<INIT_LIST_TYPE> il,
4206 bsl::allocator_arg_t{},
4210 std::forward<t_ARGS>(args)...)
4223 template <
size_t t_INDEX,
4225 class =
typename bsl::enable_if_t<
4226 (t_INDEX < 1 +
sizeof...(t_TAIL)) &&
4228 t_ARGS...>::value> >
4230 allocator_type allocator,
4233 : Variant_Base(
bsl::allocator_arg_t{},
4235 bsl::in_place_index_t<t_INDEX>(),
4236 std::forward<t_ARGS>(args)...)
4249 template <
size_t t_INDEX,
4250 class INIT_LIST_TYPE,
4252 class =
typename bsl::enable_if_t<
4253 (t_INDEX < 1 +
sizeof...(t_TAIL)) &&
4255 std::initializer_list<INIT_LIST_TYPE>&,
4256 t_ARGS...>::value> >
4258 allocator_type allocator,
4260 std::initializer_list<INIT_LIST_TYPE> il,
4262 : Variant_Base(
bsl::allocator_arg_t{},
4264 bsl::in_place_index_t<t_INDEX>(),
4266 std::forward<t_ARGS>(args)...)
4294 variant(BloombergLP::bslmf::MovableRef<variant> original);
4305 template <
class t_TYPE>
4314 template <
class t_TYPE>
4324 template <
class t_TYPE,
class t_ARG_01>
4326 const t_ARG_01& arg_01,
4329 template <
class t_TYPE,
class t_ARG_01,
class t_ARG_02>
4331 const t_ARG_01& arg_01,
4332 const t_ARG_02& arg_02,
4335 template <
class t_TYPE,
class t_ARG_01,
class t_ARG_02,
class t_ARG_03>
4337 const t_ARG_01& arg_01,
4338 const t_ARG_02& arg_02,
4339 const t_ARG_03& arg_03,
4342 template <
class t_TYPE,
4348 const t_ARG_01& arg_01,
4349 const t_ARG_02& arg_02,
4350 const t_ARG_03& arg_03,
4351 const t_ARG_04& arg_04,
4354 template <
class t_TYPE,
4361 const t_ARG_01& arg_01,
4362 const t_ARG_02& arg_02,
4363 const t_ARG_03& arg_03,
4364 const t_ARG_04& arg_04,
4365 const t_ARG_05& arg_05,
4368 template <
class t_TYPE,
4376 const t_ARG_01& arg_01,
4377 const t_ARG_02& arg_02,
4378 const t_ARG_03& arg_03,
4379 const t_ARG_04& arg_04,
4380 const t_ARG_05& arg_05,
4381 const t_ARG_06& arg_06,
4384 template <
class t_TYPE,
4393 const t_ARG_01& arg_01,
4394 const t_ARG_02& arg_02,
4395 const t_ARG_03& arg_03,
4396 const t_ARG_04& arg_04,
4397 const t_ARG_05& arg_05,
4398 const t_ARG_06& arg_06,
4399 const t_ARG_07& arg_07,
4402 template <
class t_TYPE,
4412 const t_ARG_01& arg_01,
4413 const t_ARG_02& arg_02,
4414 const t_ARG_03& arg_03,
4415 const t_ARG_04& arg_04,
4416 const t_ARG_05& arg_05,
4417 const t_ARG_06& arg_06,
4418 const t_ARG_07& arg_07,
4419 const t_ARG_08& arg_08,
4422 template <
class t_TYPE,
4433 const t_ARG_01& arg_01,
4434 const t_ARG_02& arg_02,
4435 const t_ARG_03& arg_03,
4436 const t_ARG_04& arg_04,
4437 const t_ARG_05& arg_05,
4438 const t_ARG_06& arg_06,
4439 const t_ARG_07& arg_07,
4440 const t_ARG_08& arg_08,
4441 const t_ARG_09& arg_09,
4444 template <
class t_TYPE,
4456 const t_ARG_01& arg_01,
4457 const t_ARG_02& arg_02,
4458 const t_ARG_03& arg_03,
4459 const t_ARG_04& arg_04,
4460 const t_ARG_05& arg_05,
4461 const t_ARG_06& arg_06,
4462 const t_ARG_07& arg_07,
4463 const t_ARG_08& arg_08,
4464 const t_ARG_09& arg_09,
4465 const t_ARG_10& arg_10,
4472 template <
size_t t_INDEX>
4480 template <
size_t t_INDEX,
class t_ARG_01>
4483 template <
size_t t_INDEX,
class t_ARG_01,
class t_ARG_02>
4485 const t_ARG_01& arg_01,
4486 const t_ARG_02& arg_02);
4488 template <
size_t t_INDEX,
class t_ARG_01,
class t_ARG_02,
class t_ARG_03>
4490 const t_ARG_01& arg_01,
4491 const t_ARG_02& arg_02,
4492 const t_ARG_03& arg_03);
4494 template <
size_t t_INDEX,
4500 const t_ARG_01& arg_01,
4501 const t_ARG_02& arg_02,
4502 const t_ARG_03& arg_03,
4503 const t_ARG_04& arg_04);
4505 template <
size_t t_INDEX,
4512 const t_ARG_01& arg_01,
4513 const t_ARG_02& arg_02,
4514 const t_ARG_03& arg_03,
4515 const t_ARG_04& arg_04,
4516 const t_ARG_05& arg_05);
4518 template <
size_t t_INDEX,
4526 const t_ARG_01& arg_01,
4527 const t_ARG_02& arg_02,
4528 const t_ARG_03& arg_03,
4529 const t_ARG_04& arg_04,
4530 const t_ARG_05& arg_05,
4531 const t_ARG_06& arg_06);
4533 template <
size_t t_INDEX,
4542 const t_ARG_01& arg_01,
4543 const t_ARG_02& arg_02,
4544 const t_ARG_03& arg_03,
4545 const t_ARG_04& arg_04,
4546 const t_ARG_05& arg_05,
4547 const t_ARG_06& arg_06,
4548 const t_ARG_07& arg_07);
4550 template <
size_t t_INDEX,
4560 const t_ARG_01& arg_01,
4561 const t_ARG_02& arg_02,
4562 const t_ARG_03& arg_03,
4563 const t_ARG_04& arg_04,
4564 const t_ARG_05& arg_05,
4565 const t_ARG_06& arg_06,
4566 const t_ARG_07& arg_07,
4567 const t_ARG_08& arg_08);
4569 template <
size_t t_INDEX,
4580 const t_ARG_01& arg_01,
4581 const t_ARG_02& arg_02,
4582 const t_ARG_03& arg_03,
4583 const t_ARG_04& arg_04,
4584 const t_ARG_05& arg_05,
4585 const t_ARG_06& arg_06,
4586 const t_ARG_07& arg_07,
4587 const t_ARG_08& arg_08,
4588 const t_ARG_09& arg_09);
4590 template <
size_t t_INDEX,
4602 const t_ARG_01& arg_01,
4603 const t_ARG_02& arg_02,
4604 const t_ARG_03& arg_03,
4605 const t_ARG_04& arg_04,
4606 const t_ARG_05& arg_05,
4607 const t_ARG_06& arg_06,
4608 const t_ARG_07& arg_07,
4609 const t_ARG_08& arg_08,
4610 const t_ARG_09& arg_09,
4611 const t_ARG_10& arg_10);
4631 BloombergLP::bslmf::MovableRef<variant> original);
4642 template <
class t_TYPE>
4646 const t_TYPE& value,
4656 template <
class t_TYPE>
4668 template <
class t_TYPE,
class t_ARG_01>
4673 const t_ARG_01& arg_01,
4676 template <
class t_TYPE,
class t_ARG_01,
class t_ARG_02>
4681 const t_ARG_01& arg_01,
4682 const t_ARG_02& arg_02,
4685 template <
class t_TYPE,
class t_ARG_01,
class t_ARG_02,
class t_ARG_03>
4690 const t_ARG_01& arg_01,
4691 const t_ARG_02& arg_02,
4692 const t_ARG_03& arg_03,
4695 template <
class t_TYPE,
4703 const t_ARG_01& arg_01,
4704 const t_ARG_02& arg_02,
4705 const t_ARG_03& arg_03,
4706 const t_ARG_04& arg_04,
4709 template <
class t_TYPE,
4718 const t_ARG_01& arg_01,
4719 const t_ARG_02& arg_02,
4720 const t_ARG_03& arg_03,
4721 const t_ARG_04& arg_04,
4722 const t_ARG_05& arg_05,
4725 template <
class t_TYPE,
4735 const t_ARG_01& arg_01,
4736 const t_ARG_02& arg_02,
4737 const t_ARG_03& arg_03,
4738 const t_ARG_04& arg_04,
4739 const t_ARG_05& arg_05,
4740 const t_ARG_06& arg_06,
4743 template <
class t_TYPE,
4754 const t_ARG_01& arg_01,
4755 const t_ARG_02& arg_02,
4756 const t_ARG_03& arg_03,
4757 const t_ARG_04& arg_04,
4758 const t_ARG_05& arg_05,
4759 const t_ARG_06& arg_06,
4760 const t_ARG_07& arg_07,
4763 template <
class t_TYPE,
4775 const t_ARG_01& arg_01,
4776 const t_ARG_02& arg_02,
4777 const t_ARG_03& arg_03,
4778 const t_ARG_04& arg_04,
4779 const t_ARG_05& arg_05,
4780 const t_ARG_06& arg_06,
4781 const t_ARG_07& arg_07,
4782 const t_ARG_08& arg_08,
4785 template <
class t_TYPE,
4798 const t_ARG_01& arg_01,
4799 const t_ARG_02& arg_02,
4800 const t_ARG_03& arg_03,
4801 const t_ARG_04& arg_04,
4802 const t_ARG_05& arg_05,
4803 const t_ARG_06& arg_06,
4804 const t_ARG_07& arg_07,
4805 const t_ARG_08& arg_08,
4806 const t_ARG_09& arg_09,
4809 template <
class t_TYPE,
4823 const t_ARG_01& arg_01,
4824 const t_ARG_02& arg_02,
4825 const t_ARG_03& arg_03,
4826 const t_ARG_04& arg_04,
4827 const t_ARG_05& arg_05,
4828 const t_ARG_06& arg_06,
4829 const t_ARG_07& arg_07,
4830 const t_ARG_08& arg_08,
4831 const t_ARG_09& arg_09,
4832 const t_ARG_10& arg_10,
4839 template <
size_t t_INDEX>
4849 template <
size_t t_INDEX,
class t_ARG_01>
4853 const t_ARG_01& arg_01);
4855 template <
size_t t_INDEX,
class t_ARG_01,
class t_ARG_02>
4859 const t_ARG_01& arg_01,
4860 const t_ARG_02& arg_02);
4862 template <
size_t t_INDEX,
class t_ARG_01,
class t_ARG_02,
class t_ARG_03>
4866 const t_ARG_01& arg_01,
4867 const t_ARG_02& arg_02,
4868 const t_ARG_03& arg_03);
4870 template <
size_t t_INDEX,
4878 const t_ARG_01& arg_01,
4879 const t_ARG_02& arg_02,
4880 const t_ARG_03& arg_03,
4881 const t_ARG_04& arg_04);
4883 template <
size_t t_INDEX,
4892 const t_ARG_01& arg_01,
4893 const t_ARG_02& arg_02,
4894 const t_ARG_03& arg_03,
4895 const t_ARG_04& arg_04,
4896 const t_ARG_05& arg_05);
4898 template <
size_t t_INDEX,
4908 const t_ARG_01& arg_01,
4909 const t_ARG_02& arg_02,
4910 const t_ARG_03& arg_03,
4911 const t_ARG_04& arg_04,
4912 const t_ARG_05& arg_05,
4913 const t_ARG_06& arg_06);
4915 template <
size_t t_INDEX,
4926 const t_ARG_01& arg_01,
4927 const t_ARG_02& arg_02,
4928 const t_ARG_03& arg_03,
4929 const t_ARG_04& arg_04,
4930 const t_ARG_05& arg_05,
4931 const t_ARG_06& arg_06,
4932 const t_ARG_07& arg_07);
4934 template <
size_t t_INDEX,
4946 const t_ARG_01& arg_01,
4947 const t_ARG_02& arg_02,
4948 const t_ARG_03& arg_03,
4949 const t_ARG_04& arg_04,
4950 const t_ARG_05& arg_05,
4951 const t_ARG_06& arg_06,
4952 const t_ARG_07& arg_07,
4953 const t_ARG_08& arg_08);
4955 template <
size_t t_INDEX,
4968 const t_ARG_01& arg_01,
4969 const t_ARG_02& arg_02,
4970 const t_ARG_03& arg_03,
4971 const t_ARG_04& arg_04,
4972 const t_ARG_05& arg_05,
4973 const t_ARG_06& arg_06,
4974 const t_ARG_07& arg_07,
4975 const t_ARG_08& arg_08,
4976 const t_ARG_09& arg_09);
4978 template <
size_t t_INDEX,
4992 const t_ARG_01& arg_01,
4993 const t_ARG_02& arg_02,
4994 const t_ARG_03& arg_03,
4995 const t_ARG_04& arg_04,
4996 const t_ARG_05& arg_05,
4997 const t_ARG_06& arg_06,
4998 const t_ARG_07& arg_07,
4999 const t_ARG_08& arg_08,
5000 const t_ARG_09& arg_09,
5001 const t_ARG_10& arg_10);
5015#ifdef BSL_VARIANT_FULL_IMPLEMENTATION
5031 template <
class t_TYPE,
5033 class =
typename bsl::enable_if_t<
5035 std::is_constructible<t_TYPE, t_ARGS...>::value> >
5036 t_TYPE& emplace(t_ARGS&&... args)
5042 Variant_Base::template baseEmplace<index>(
5043 std::forward<t_ARGS>(args)...);
5045 return bsl::get<index>(*
this);
5063 template <
class t_TYPE,
5064 class INIT_LIST_TYPE,
5066 class =
typename bsl::enable_if_t<
5068 std::is_constructible<t_TYPE,
5069 std::initializer_list<INIT_LIST_TYPE>&,
5070 t_ARGS...>::value> >
5071 t_TYPE& emplace(std::initializer_list<INIT_LIST_TYPE> il, t_ARGS&&... args)
5077 Variant_Base::template baseEmplace<index>(
5078 il, std::forward<t_ARGS>(args)...);
5080 return bsl::get<index>(*
this);
5098 template <
size_t t_INDEX,
5100 class =
typename bsl::enable_if_t<
5101 (t_INDEX < 1 +
sizeof...(t_TAIL)) &&
5103 t_ARGS...>::value> >
5104 typename variant_alternative<t_INDEX, variant<t_HEAD, t_TAIL...> >::type&
5105 emplace(t_ARGS&&... args)
5110 Variant_Base::template baseEmplace<t_INDEX>(
5111 std::forward<t_ARGS>(args)...);
5113 return bsl::get<t_INDEX>(*
this);
5132 template <
size_t t_INDEX,
5133 class INIT_LIST_TYPE,
5135 class =
typename bsl::enable_if_t<
5136 (t_INDEX < 1 +
sizeof...(t_TAIL)) &&
5138 std::initializer_list<INIT_LIST_TYPE>&,
5139 t_ARGS...>::value> >
5140 typename variant_alternative<t_INDEX, variant<t_HEAD, t_TAIL...> >::type&
5141 emplace(std::initializer_list<INIT_LIST_TYPE> il, t_ARGS&&... args)
5146 Variant_Base::template baseEmplace<t_INDEX>(
5147 il, std::forward<t_ARGS>(args)...);
5149 return bsl::get<t_INDEX>(*
this);
5166 template <
class t_TYPE>
5168 BloombergLP::bslstl::Variant_HasUniqueType<t_TYPE, variant>::value,
5184 template <
class t_TYPE,
class t_ARG_01>
5186 BloombergLP::bslstl::Variant_HasUniqueType<t_TYPE, variant>::value,
5190 template <
class t_TYPE,
class t_ARG_01,
class t_ARG_02>
5192 BloombergLP::bslstl::Variant_HasUniqueType<t_TYPE, variant>::value,
5194 emplace(
const t_ARG_01& arg_01,
const t_ARG_02& arg_02);
5196 template <
class t_TYPE,
class t_ARG_01,
class t_ARG_02,
class t_ARG_03>
5198 BloombergLP::bslstl::Variant_HasUniqueType<t_TYPE, variant>::value,
5201 const t_ARG_02& arg_02,
5202 const t_ARG_03& arg_03);
5204 template <
class t_TYPE,
5210 BloombergLP::bslstl::Variant_HasUniqueType<t_TYPE, variant>::value,
5213 const t_ARG_02& arg_02,
5214 const t_ARG_03& arg_03,
5215 const t_ARG_04& arg_04);
5217 template <
class t_TYPE,
5224 BloombergLP::bslstl::Variant_HasUniqueType<t_TYPE, variant>::value,
5227 const t_ARG_02& arg_02,
5228 const t_ARG_03& arg_03,
5229 const t_ARG_04& arg_04,
5230 const t_ARG_05& arg_05);
5232 template <
class t_TYPE,
5240 BloombergLP::bslstl::Variant_HasUniqueType<t_TYPE, variant>::value,
5243 const t_ARG_02& arg_02,
5244 const t_ARG_03& arg_03,
5245 const t_ARG_04& arg_04,
5246 const t_ARG_05& arg_05,
5247 const t_ARG_06& arg_06);
5249 template <
class t_TYPE,
5258 BloombergLP::bslstl::Variant_HasUniqueType<t_TYPE, variant>::value,
5261 const t_ARG_02& arg_02,
5262 const t_ARG_03& arg_03,
5263 const t_ARG_04& arg_04,
5264 const t_ARG_05& arg_05,
5265 const t_ARG_06& arg_06,
5266 const t_ARG_07& arg_07);
5268 template <
class t_TYPE,
5278 BloombergLP::bslstl::Variant_HasUniqueType<t_TYPE, variant>::value,
5281 const t_ARG_02& arg_02,
5282 const t_ARG_03& arg_03,
5283 const t_ARG_04& arg_04,
5284 const t_ARG_05& arg_05,
5285 const t_ARG_06& arg_06,
5286 const t_ARG_07& arg_07,
5287 const t_ARG_08& arg_08);
5289 template <
class t_TYPE,
5300 BloombergLP::bslstl::Variant_HasUniqueType<t_TYPE, variant>::value,
5303 const t_ARG_02& arg_02,
5304 const t_ARG_03& arg_03,
5305 const t_ARG_04& arg_04,
5306 const t_ARG_05& arg_05,
5307 const t_ARG_06& arg_06,
5308 const t_ARG_07& arg_07,
5309 const t_ARG_08& arg_08,
5310 const t_ARG_09& arg_09);
5312 template <
class t_TYPE,
5324 BloombergLP::bslstl::Variant_HasUniqueType<t_TYPE, variant>::value,
5327 const t_ARG_02& arg_02,
5328 const t_ARG_03& arg_03,
5329 const t_ARG_04& arg_04,
5330 const t_ARG_05& arg_05,
5331 const t_ARG_06& arg_06,
5332 const t_ARG_07& arg_07,
5333 const t_ARG_08& arg_08,
5334 const t_ARG_09& arg_09,
5335 const t_ARG_10& arg_10);
5349 template <
size_t t_INDEX>
5365 template <
size_t t_INDEX,
class t_ARG_01>
5369 template <
size_t t_INDEX,
class t_ARG_01,
class t_ARG_02>
5371 emplace(
const t_ARG_01& arg_01,
const t_ARG_02& arg_02);
5373 template <
size_t t_INDEX,
class t_ARG_01,
class t_ARG_02,
class t_ARG_03>
5376 const t_ARG_02& arg_02,
5377 const t_ARG_03& arg_03);
5379 template <
size_t t_INDEX,
5386 const t_ARG_02& arg_02,
5387 const t_ARG_03& arg_03,
5388 const t_ARG_04& arg_04);
5390 template <
size_t t_INDEX,
5398 const t_ARG_02& arg_02,
5399 const t_ARG_03& arg_03,
5400 const t_ARG_04& arg_04,
5401 const t_ARG_05& arg_05);
5403 template <
size_t t_INDEX,
5412 const t_ARG_02& arg_02,
5413 const t_ARG_03& arg_03,
5414 const t_ARG_04& arg_04,
5415 const t_ARG_05& arg_05,
5416 const t_ARG_06& arg_06);
5418 template <
size_t t_INDEX,
5428 const t_ARG_02& arg_02,
5429 const t_ARG_03& arg_03,
5430 const t_ARG_04& arg_04,
5431 const t_ARG_05& arg_05,
5432 const t_ARG_06& arg_06,
5433 const t_ARG_07& arg_07);
5435 template <
size_t t_INDEX,
5446 const t_ARG_02& arg_02,
5447 const t_ARG_03& arg_03,
5448 const t_ARG_04& arg_04,
5449 const t_ARG_05& arg_05,
5450 const t_ARG_06& arg_06,
5451 const t_ARG_07& arg_07,
5452 const t_ARG_08& arg_08);
5454 template <
size_t t_INDEX,
5466 const t_ARG_02& arg_02,
5467 const t_ARG_03& arg_03,
5468 const t_ARG_04& arg_04,
5469 const t_ARG_05& arg_05,
5470 const t_ARG_06& arg_06,
5471 const t_ARG_07& arg_07,
5472 const t_ARG_08& arg_08,
5473 const t_ARG_09& arg_09);
5475 template <
size_t t_INDEX,
5488 const t_ARG_02& arg_02,
5489 const t_ARG_03& arg_03,
5490 const t_ARG_04& arg_04,
5491 const t_ARG_05& arg_05,
5492 const t_ARG_06& arg_06,
5493 const t_ARG_07& arg_07,
5494 const t_ARG_08& arg_08,
5495 const t_ARG_09& arg_09,
5496 const t_ARG_10& arg_10);
5501#ifdef BSL_VARIANT_FULL_IMPLEMENTATION
5564 template <
class t_TYPE>
5566 BloombergLP::bslstl::Variant_AssignsFromType<variant, t_TYPE>::value,
5568 operator=(t_TYPE&& value)
5573 const size_t altIndex =
5576 if (index() == altIndex) {
5577 bsl::get<altIndex>(*
this) = std::forward<t_TYPE>(value);
5582 Variant_Base::template baseEmplace<altIndex>(
5583 std::forward<t_TYPE>(value));
5598 variant& operator=(const variant& rhs);
5624 template <
class t_TYPE>
5626 BloombergLP::bslstl::Variant_AssignsFromType<variant, t_TYPE>::value,
5651#ifdef BSL_VARIANT_FULL_IMPLEMENTATION
5652 template <
bool t_USES_BSLMA_ALLOC = BloombergLP::bslstl::
5653 Variant_UsesBslmaAllocatorAny<t_HEAD, t_TAIL...>::value,
5654 class =
typename bsl::enable_if_t<t_USES_BSLMA_ALLOC> >
5660 allocator_type get_allocator() const BSLS_KEYWORD_NOEXCEPT
5706template <
class t_RET,
class t_VARIANT_UNION>
5707t_RET& Variant_ImpUtil::getAlternative(
5711 return variantUnion.d_head.value();
5714template <
class t_RET,
size_t t_INDEX,
class t_VARIANT_UNION>
5715t_RET& Variant_ImpUtil::getAlternative(
5720 variantUnion.d_tail);
5723template <
class t_RET,
size_t t_INDEX,
class t_VARIANT>
5724t_RET& Variant_ImpUtil::get(t_VARIANT& variant)
5726 if (variant.index() != t_INDEX) {
5734template <
class t_RET,
size_t t_INDEX,
class t_VARIANT>
5735t_RET& Variant_ImpUtil::get(
const t_VARIANT& variant)
5737 if (variant.index() != t_INDEX) {
5745#ifdef BSL_VARIANT_FULL_IMPLEMENTATION
5746template <
class t_RET,
class t_VISITOR,
class t_VARIANT>
5747t_RET Variant_ImpUtil::visit(t_VISITOR&& visitor, t_VARIANT&& variant)
5749 static constexpr size_t varSize =
5756 bslmf::MakeIntegerSequence<std::size_t, varSize> >::FuncPtr FuncPtr;
5764 bslmf::MakeIntegerSequence<std::size_t, varSize> >::
5765 s_map[variant.index()];
5767 return (*funcPtr)(std::forward<t_VISITOR>(visitor),
5768 std::forward<t_VARIANT>(variant));
5770template <
class t_RET,
class t_VISITOR,
class t_VARIANT>
5771t_RET Variant_ImpUtil::visitId(t_VISITOR&& visitor, t_VARIANT&& variant)
5773 static constexpr size_t varSize =
5776 typedef typename Variant_VTableId<
5780 bslmf::MakeIntegerSequence<std::size_t, varSize> >::FuncPtr FuncPtr;
5783 Variant_VTableId<t_RET,
5786 bslmf::MakeIntegerSequence<std::size_t, varSize> >::
5787 s_mapId[variant.index()];
5789 return (*funcPtr)(std::forward<t_VISITOR>(visitor),
5790 std::forward<t_VARIANT>(variant));
5794template <
class t_RET,
size_t t_INDEX,
class t_VARIANT>
5795t_RET& Variant_ImpUtil::unsafeGet(t_VARIANT& variant)
5801template <
class t_RET,
size_t t_INDEX,
class t_VARIANT>
5802t_RET& Variant_ImpUtil::unsafeGet(
const t_VARIANT& variant)
5808template <
class t_TYPE,
class t_VARIANT>
5809t_TYPE& Variant_ImpUtil::unsafeGet(t_VARIANT& obj)
5811 return unsafeGet<t_TYPE, BSLSTL_VARIANT_INDEX_OF(t_TYPE, t_VARIANT)>(
5815template <
class t_TYPE,
class t_VARIANT>
5816const t_TYPE& Variant_ImpUtil::unsafeGet(
const t_VARIANT& obj)
5818 return unsafeGet<const t_TYPE, BSLSTL_VARIANT_INDEX_OF(t_TYPE, t_VARIANT)>(
5822template <
class t_RET,
class t_VISITOR,
class t_VARIANT>
5823t_RET Variant_ImpUtil::visit(t_VISITOR& visitor, t_VARIANT& variant)
5833 return (*funcPtr)(visitor, variant);
5836template <
class t_RET,
class t_VISITOR,
class t_VARIANT>
5837t_RET Variant_ImpUtil::visit(t_VISITOR& visitor,
const t_VARIANT& variant)
5848 return (*funcPtr)(visitor, variant);
5851template <
class t_RET,
class t_VISITOR,
class t_VARIANT>
5852t_RET Variant_ImpUtil::moveVisit(t_VISITOR& visitor, t_VARIANT& variant)
5863 return (*funcPtr)(visitor, variant);
5870template <
class t_RET,
class t_VISITOR,
class t_VARIANT>
5871t_RET Variant_ImpUtil::visitId(t_VISITOR& visitor, t_VARIANT& variant)
5879 return (*funcPtr)(visitor, variant);
5882template <
class t_RET,
class t_VISITOR,
class t_VARIANT>
5883t_RET Variant_ImpUtil::visitId(t_VISITOR& visitor,
const t_VARIANT& variant)
5889 mapId()[variant.index()];
5891 return (*funcPtr)(visitor, variant);
5896#ifdef BSLS_LIBRARYFEATURES_HAS_CPP17_BASELINE_LIBRARY
5901template <
class t_VARIANT,
class t_STD_VARIANT>
5902Variant_ImpUtil::ConstructFromStdVisitor<t_VARIANT, t_STD_VARIANT>::
5903 ConstructFromStdVisitor(t_VARIANT& target, t_STD_VARIANT& original)
5905, d_original(original)
5909template <
class t_VARIANT,
class t_STD_VARIANT>
5910template <
size_t t_INDEX,
class t_TYPE>
5912Variant_ImpUtil::ConstructFromStdVisitor<t_VARIANT, t_STD_VARIANT>::
5923 d_target.template baseEmplace<t_INDEX>(
5924 std::get<t_INDEX>(std::forward<t_STD_VARIANT>(d_original)));
5943#ifdef BSL_VARIANT_FULL_IMPLEMENTATION
5945template <
class t_TYPE>
5946template <
class... t_ARGS>
5950 BloombergLP::bslma::ConstructionUtil::construct(
5951 d_buffer.
address(), std::forward<t_ARGS>(args)...);
5956#ifdef BSL_VARIANT_FULL_IMPLEMENTATION
5957template <
class t_TYPE>
5961 return d_buffer.
object();
5964template <
class t_TYPE>
5968 return std::move(d_buffer.
object());
5971template <
class t_TYPE>
5975 return d_buffer.
object();
5980#ifdef BSL_VARIANT_FULL_IMPLEMENTATION
5981template <
class t_TYPE>
5986 return d_buffer.
object();
5989template <
class t_TYPE>
5994 return std::move(d_buffer.
object());
5997template <
class t_TYPE>
6001 return d_buffer.
object();
6008template <
class t_VARIANT>
6011 if (lhs.get_allocator() == rhs.get_allocator()) {
6016 t_VARIANT futureLhs(bsl::allocator_arg, lhs.get_allocator(), rhs);
6017 t_VARIANT futureRhs(bsl::allocator_arg, rhs.get_allocator(), lhs);
6019 futureLhs.swap(lhs);
6020 futureRhs.swap(rhs);
6026template <
class t_VARIANT>
6037#ifdef BSL_VARIANT_FULL_IMPLEMENTATION
6038template <
class t_HEAD,
class... t_TAIL>
6043, d_union(
bsl::in_place_index_t<0>(), AllocBase::mechanism())
6047template <
class t_HEAD,
class... t_TAIL>
6049Variant_Base<t_HEAD, t_TAIL...>::Variant_Base(
const Variant_Base& original)
6054 BloombergLP::bslstl::Variant_CopyConstructVisitor<Variant_Base>
6055 copyConstructor(
this);
6057 void, copyConstructor,
static_cast<const Variant&
>(original));
6061template <
class t_HEAD,
class... t_TAIL>
6063Variant_Base<t_HEAD, t_TAIL...>::Variant_Base(Variant_Base&& original)
6064: AllocBase(original)
6068 BloombergLP::bslstl::Variant_MoveConstructVisitor<Variant_Base>
6069 moveConstructor(
this);
6071 void, moveConstructor,
static_cast<Variant&
>(original));
6075#ifdef BSLS_LIBRARYFEATURES_HAS_CPP17_BASELINE_LIBRARY
6076template <
class t_HEAD,
class... t_TAIL>
6077Variant_Base<t_HEAD, t_TAIL...>::Variant_Base(Variant_ConstructFromStdTag,
6085template <
class t_HEAD,
class... t_TAIL>
6088 allocator_type allocator)
6089: AllocBase(allocator)
6091, d_union(
bsl::in_place_index_t<0>(), AllocBase::mechanism())
6095template <
class t_HEAD,
class... t_TAIL>
6098 allocator_type allocator,
6099 const Variant& original)
6100: AllocBase(allocator)
6104 BloombergLP::bslstl::Variant_CopyConstructVisitor<Variant_Base>
6105 copyConstructor(
this);
6110template <
class t_HEAD,
class... t_TAIL>
6113 allocator_type allocator,
6115: AllocBase(allocator)
6119 BloombergLP::bslstl::Variant_MoveConstructVisitor<Variant_Base>
6120 moveConstructor(
this);
6125#ifdef BSLS_LIBRARYFEATURES_HAS_CPP17_BASELINE_LIBRARY
6126template <
class t_HEAD,
class... t_TAIL>
6128 allocator_type allocator,
6129 Variant_ConstructFromStdTag,
6131: AllocBase(allocator)
6137template <
class t_HEAD,
class... t_TAIL>
6138template <
size_t t_INDEX,
class... t_ARGS>
6143, d_union(
bsl::in_place_index_t<t_INDEX>(),
6144 AllocBase::mechanism(),
6145 std::forward<t_ARGS>(args)...)
6149template <
class t_HEAD,
class... t_TAIL>
6150template <
size_t t_INDEX,
class... t_ARGS>
6153 allocator_type allocator,
6156: AllocBase(allocator)
6158, d_union(
bsl::in_place_index_t<t_INDEX>(),
6159 AllocBase::mechanism(),
6160 std::forward<t_ARGS>(args)...)
6164#if !BSLS_COMPILERFEATURES_SIMULATE_CPP11_FEATURES
6165template <
class t_HEAD,
class... t_TAIL>
6173 BloombergLP::bslma::ConstructionUtil::construct(
6175 AllocBase::mechanism());
6178template <
class t_HEAD,
class... t_TAIL>
6182, d_type(
bsl::variant_npos)
6185 BloombergLP::bslstl::Variant_CopyConstructVisitor<Variant_Base>
6186 copyConstructor(
this);
6191 d_type = original.d_type;
6195template <
class t_HEAD,
class... t_TAIL>
6198 BloombergLP::bslmf::MovableRef<Variant> original)
6200, d_type(
bsl::variant_npos)
6204 BloombergLP::bslstl::Variant_MoveConstructVisitor<Variant_Base>
6205 moveConstructor(
this);
6214template <
class t_HEAD,
class... t_TAIL>
6215template <
size_t t_INDEX>
6225 BloombergLP::bslma::ConstructionUtil::construct(
6227 AllocBase::mechanism());
6230template <
class t_HEAD,
class... t_TAIL>
6231template <
size_t t_INDEX,
class t_ARG_01>
6235 const t_ARG_01& arg_01)
6243 BloombergLP::bslma::ConstructionUtil::construct(
6245 AllocBase::mechanism(),
6249template <
class t_HEAD,
class... t_TAIL>
6250template <
size_t t_INDEX,
class t_ARG_01,
class t_ARG_02>
6254 const t_ARG_01& arg_01,
6255 const t_ARG_02& arg_02)
6263 BloombergLP::bslma::ConstructionUtil::construct(
6265 AllocBase::mechanism(),
6270template <
class t_HEAD,
class... t_TAIL>
6271template <
size_t t_INDEX,
class t_ARG_01,
class t_ARG_02,
class t_ARG_03>
6275 const t_ARG_01& arg_01,
6276 const t_ARG_02& arg_02,
6277 const t_ARG_03& arg_03)
6285 BloombergLP::bslma::ConstructionUtil::construct(
6287 AllocBase::mechanism(),
6293template <
class t_HEAD,
class... t_TAIL>
6294template <
size_t t_INDEX,
6301 const t_ARG_01& arg_01,
6302 const t_ARG_02& arg_02,
6303 const t_ARG_03& arg_03,
6304 const t_ARG_04& arg_04)
6312 BloombergLP::bslma::ConstructionUtil::construct(
6314 AllocBase::mechanism(),
6321template <
class t_HEAD,
class... t_TAIL>
6322template <
size_t t_INDEX,
6330 const t_ARG_01& arg_01,
6331 const t_ARG_02& arg_02,
6332 const t_ARG_03& arg_03,
6333 const t_ARG_04& arg_04,
6334 const t_ARG_05& arg_05)
6342 BloombergLP::bslma::ConstructionUtil::construct(
6344 AllocBase::mechanism(),
6352template <
class t_HEAD,
class... t_TAIL>
6353template <
size_t t_INDEX,
6362 const t_ARG_01& arg_01,
6363 const t_ARG_02& arg_02,
6364 const t_ARG_03& arg_03,
6365 const t_ARG_04& arg_04,
6366 const t_ARG_05& arg_05,
6367 const t_ARG_06& arg_06)
6375 BloombergLP::bslma::ConstructionUtil::construct(
6377 AllocBase::mechanism(),
6386template <
class t_HEAD,
class... t_TAIL>
6387template <
size_t t_INDEX,
6397 const t_ARG_01& arg_01,
6398 const t_ARG_02& arg_02,
6399 const t_ARG_03& arg_03,
6400 const t_ARG_04& arg_04,
6401 const t_ARG_05& arg_05,
6402 const t_ARG_06& arg_06,
6403 const t_ARG_07& arg_07)
6411 BloombergLP::bslma::ConstructionUtil::construct(
6413 AllocBase::mechanism(),
6423template <
class t_HEAD,
class... t_TAIL>
6424template <
size_t t_INDEX,
6435 const t_ARG_01& arg_01,
6436 const t_ARG_02& arg_02,
6437 const t_ARG_03& arg_03,
6438 const t_ARG_04& arg_04,
6439 const t_ARG_05& arg_05,
6440 const t_ARG_06& arg_06,
6441 const t_ARG_07& arg_07,
6442 const t_ARG_08& arg_08)
6450 BloombergLP::bslma::ConstructionUtil::construct(
6452 AllocBase::mechanism(),
6463template <
class t_HEAD,
class... t_TAIL>
6464template <
size_t t_INDEX,
6476 const t_ARG_01& arg_01,
6477 const t_ARG_02& arg_02,
6478 const t_ARG_03& arg_03,
6479 const t_ARG_04& arg_04,
6480 const t_ARG_05& arg_05,
6481 const t_ARG_06& arg_06,
6482 const t_ARG_07& arg_07,
6483 const t_ARG_08& arg_08,
6484 const t_ARG_09& arg_09)
6492 BloombergLP::bslma::ConstructionUtil::construct(
6494 AllocBase::mechanism(),
6506template <
class t_HEAD,
class... t_TAIL>
6507template <
size_t t_INDEX,
6520 const t_ARG_01& arg_01,
6521 const t_ARG_02& arg_02,
6522 const t_ARG_03& arg_03,
6523 const t_ARG_04& arg_04,
6524 const t_ARG_05& arg_05,
6525 const t_ARG_06& arg_06,
6526 const t_ARG_07& arg_07,
6527 const t_ARG_08& arg_08,
6528 const t_ARG_09& arg_09,
6529 const t_ARG_10& arg_10)
6537 BloombergLP::bslma::ConstructionUtil::construct(
6539 AllocBase::mechanism(),
6552template <
class t_HEAD,
class... t_TAIL>
6559 BloombergLP::bslma::ConstructionUtil::construct(
6561 AllocBase::mechanism());
6564template <
class t_HEAD,
class... t_TAIL>
6570, d_type(
bsl::variant_npos)
6573 BloombergLP::bslstl::Variant_CopyConstructVisitor<Variant_Base>
6574 copyConstructor(
this);
6580 d_type = original.d_type;
6584template <
class t_HEAD,
class... t_TAIL>
6589 BloombergLP::bslmf::MovableRef<Variant> original)
6591, d_type(
bsl::variant_npos)
6595 BloombergLP::bslstl::Variant_MoveConstructVisitor<Variant_Base>
6596 moveConstructor(
this);
6606template <
class t_HEAD,
class... t_TAIL>
6607template <
size_t t_INDEX>
6620 BloombergLP::bslma::ConstructionUtil::construct(
6622 AllocBase::mechanism());
6625template <
class t_HEAD,
class... t_TAIL>
6626template <
size_t t_INDEX,
class t_ARG_01>
6632 const t_ARG_01& arg_01)
6640 BloombergLP::bslma::ConstructionUtil::construct(
6642 AllocBase::mechanism(),
6646template <
class t_HEAD,
class... t_TAIL>
6647template <
size_t t_INDEX,
class t_ARG_01,
class t_ARG_02>
6653 const t_ARG_01& arg_01,
6654 const t_ARG_02& arg_02)
6662 BloombergLP::bslma::ConstructionUtil::construct(
6664 AllocBase::mechanism(),
6669template <
class t_HEAD,
class... t_TAIL>
6670template <
size_t t_INDEX,
class t_ARG_01,
class t_ARG_02,
class t_ARG_03>
6676 const t_ARG_01& arg_01,
6677 const t_ARG_02& arg_02,
6678 const t_ARG_03& arg_03)
6686 BloombergLP::bslma::ConstructionUtil::construct(
6688 AllocBase::mechanism(),
6694template <
class t_HEAD,
class... t_TAIL>
6695template <
size_t t_INDEX,
6704 const t_ARG_01& arg_01,
6705 const t_ARG_02& arg_02,
6706 const t_ARG_03& arg_03,
6707 const t_ARG_04& arg_04)
6715 BloombergLP::bslma::ConstructionUtil::construct(
6717 AllocBase::mechanism(),
6724template <
class t_HEAD,
class... t_TAIL>
6725template <
size_t t_INDEX,
6735 const t_ARG_01& arg_01,
6736 const t_ARG_02& arg_02,
6737 const t_ARG_03& arg_03,
6738 const t_ARG_04& arg_04,
6739 const t_ARG_05& arg_05)
6747 BloombergLP::bslma::ConstructionUtil::construct(
6749 AllocBase::mechanism(),
6757template <
class t_HEAD,
class... t_TAIL>
6758template <
size_t t_INDEX,
6769 const t_ARG_01& arg_01,
6770 const t_ARG_02& arg_02,
6771 const t_ARG_03& arg_03,
6772 const t_ARG_04& arg_04,
6773 const t_ARG_05& arg_05,
6774 const t_ARG_06& arg_06)
6782 BloombergLP::bslma::ConstructionUtil::construct(
6784 AllocBase::mechanism(),
6793template <
class t_HEAD,
class... t_TAIL>
6794template <
size_t t_INDEX,
6806 const t_ARG_01& arg_01,
6807 const t_ARG_02& arg_02,
6808 const t_ARG_03& arg_03,
6809 const t_ARG_04& arg_04,
6810 const t_ARG_05& arg_05,
6811 const t_ARG_06& arg_06,
6812 const t_ARG_07& arg_07)
6820 BloombergLP::bslma::ConstructionUtil::construct(
6822 AllocBase::mechanism(),
6832template <
class t_HEAD,
class... t_TAIL>
6833template <
size_t t_INDEX,
6846 const t_ARG_01& arg_01,
6847 const t_ARG_02& arg_02,
6848 const t_ARG_03& arg_03,
6849 const t_ARG_04& arg_04,
6850 const t_ARG_05& arg_05,
6851 const t_ARG_06& arg_06,
6852 const t_ARG_07& arg_07,
6853 const t_ARG_08& arg_08)
6861 BloombergLP::bslma::ConstructionUtil::construct(
6863 AllocBase::mechanism(),
6874template <
class t_HEAD,
class... t_TAIL>
6875template <
size_t t_INDEX,
6889 const t_ARG_01& arg_01,
6890 const t_ARG_02& arg_02,
6891 const t_ARG_03& arg_03,
6892 const t_ARG_04& arg_04,
6893 const t_ARG_05& arg_05,
6894 const t_ARG_06& arg_06,
6895 const t_ARG_07& arg_07,
6896 const t_ARG_08& arg_08,
6897 const t_ARG_09& arg_09)
6905 BloombergLP::bslma::ConstructionUtil::construct(
6907 AllocBase::mechanism(),
6919template <
class t_HEAD,
class... t_TAIL>
6920template <
size_t t_INDEX,
6935 const t_ARG_01& arg_01,
6936 const t_ARG_02& arg_02,
6937 const t_ARG_03& arg_03,
6938 const t_ARG_04& arg_04,
6939 const t_ARG_05& arg_05,
6940 const t_ARG_06& arg_06,
6941 const t_ARG_07& arg_07,
6942 const t_ARG_08& arg_08,
6943 const t_ARG_09& arg_09,
6944 const t_ARG_10& arg_10)
6952 BloombergLP::bslma::ConstructionUtil::construct(
6954 AllocBase::mechanism(),
6969#if !BSLS_COMPILERFEATURES_SIMULATE_CPP11_FEATURES
6970template <
class t_HEAD,
class... t_TAIL>
6977#ifdef BSL_VARIANT_FULL_IMPLEMENTATION
6978template <
class t_HEAD,
class... t_TAIL>
6979template <
size_t t_INDEX,
class... t_ARGS>
6994 BloombergLP::bslma::ConstructionUtil::construct(
6998 AllocBase::mechanism(),
6999 std::forward<t_ARGS>(args)...);
7004#if !BSLS_COMPILERFEATURES_SIMULATE_CPP11_FEATURES
7005template <
class t_HEAD,
class... t_TAIL>
7006template <
size_t t_INDEX>
7015 BloombergLP::bslma::ConstructionUtil::construct(
7017 AllocBase::mechanism());
7021template <
class t_HEAD,
class... t_TAIL>
7022template <
size_t t_INDEX,
class t_ARG_01>
7031 BloombergLP::bslma::ConstructionUtil::construct(
7033 AllocBase::mechanism(),
7038template <
class t_HEAD,
class... t_TAIL>
7039template <
size_t t_INDEX,
class t_ARG_01,
class t_ARG_02>
7041 const t_ARG_02& arg_02)
7049 BloombergLP::bslma::ConstructionUtil::construct(
7051 AllocBase::mechanism(),
7057template <
class t_HEAD,
class... t_TAIL>
7058template <
size_t t_INDEX,
class t_ARG_01,
class t_ARG_02,
class t_ARG_03>
7060 const t_ARG_02& arg_02,
7061 const t_ARG_03& arg_03)
7069 BloombergLP::bslma::ConstructionUtil::construct(
7071 AllocBase::mechanism(),
7078template <
class t_HEAD,
class... t_TAIL>
7079template <
size_t t_INDEX,
7085 const t_ARG_02& arg_02,
7086 const t_ARG_03& arg_03,
7087 const t_ARG_04& arg_04)
7095 BloombergLP::bslma::ConstructionUtil::construct(
7097 AllocBase::mechanism(),
7105template <
class t_HEAD,
class... t_TAIL>
7106template <
size_t t_INDEX,
7113 const t_ARG_02& arg_02,
7114 const t_ARG_03& arg_03,
7115 const t_ARG_04& arg_04,
7116 const t_ARG_05& arg_05)
7124 BloombergLP::bslma::ConstructionUtil::construct(
7126 AllocBase::mechanism(),
7135template <
class t_HEAD,
class... t_TAIL>
7136template <
size_t t_INDEX,
7144 const t_ARG_02& arg_02,
7145 const t_ARG_03& arg_03,
7146 const t_ARG_04& arg_04,
7147 const t_ARG_05& arg_05,
7148 const t_ARG_06& arg_06)
7156 BloombergLP::bslma::ConstructionUtil::construct(
7158 AllocBase::mechanism(),
7168template <
class t_HEAD,
class... t_TAIL>
7169template <
size_t t_INDEX,
7178 const t_ARG_02& arg_02,
7179 const t_ARG_03& arg_03,
7180 const t_ARG_04& arg_04,
7181 const t_ARG_05& arg_05,
7182 const t_ARG_06& arg_06,
7183 const t_ARG_07& arg_07)
7191 BloombergLP::bslma::ConstructionUtil::construct(
7193 AllocBase::mechanism(),
7204template <
class t_HEAD,
class... t_TAIL>
7205template <
size_t t_INDEX,
7215 const t_ARG_02& arg_02,
7216 const t_ARG_03& arg_03,
7217 const t_ARG_04& arg_04,
7218 const t_ARG_05& arg_05,
7219 const t_ARG_06& arg_06,
7220 const t_ARG_07& arg_07,
7221 const t_ARG_08& arg_08)
7229 BloombergLP::bslma::ConstructionUtil::construct(
7231 AllocBase::mechanism(),
7243template <
class t_HEAD,
class... t_TAIL>
7244template <
size_t t_INDEX,
7255 const t_ARG_02& arg_02,
7256 const t_ARG_03& arg_03,
7257 const t_ARG_04& arg_04,
7258 const t_ARG_05& arg_05,
7259 const t_ARG_06& arg_06,
7260 const t_ARG_07& arg_07,
7261 const t_ARG_08& arg_08,
7262 const t_ARG_09& arg_09)
7270 BloombergLP::bslma::ConstructionUtil::construct(
7272 AllocBase::mechanism(),
7285template <
class t_HEAD,
class... t_TAIL>
7286template <
size_t t_INDEX,
7298 const t_ARG_02& arg_02,
7299 const t_ARG_03& arg_03,
7300 const t_ARG_04& arg_04,
7301 const t_ARG_05& arg_05,
7302 const t_ARG_06& arg_06,
7303 const t_ARG_07& arg_07,
7304 const t_ARG_08& arg_08,
7305 const t_ARG_09& arg_09,
7306 const t_ARG_10& arg_10)
7314 BloombergLP::bslma::ConstructionUtil::construct(
7316 AllocBase::mechanism(),
7332#if !BSLS_COMPILERFEATURES_SIMULATE_CPP11_FEATURES
7333template <
class t_HEAD,
class... t_TAIL>
7339 if (this->d_type == rhs.d_type) {
7342 BloombergLP::bslstl::Variant_CopyAssignVisitor<Variant>
7345 void, copyAssign,
static_cast<const Variant&
>(rhs));
7351 BloombergLP::bslstl::Variant_CopyConstructVisitor<Variant_Base>
7352 copyConstructor(
this);
7354 void, copyConstructor,
static_cast<const Variant&
>(rhs));
7356 d_type = rhs.d_type;
7362template <
class t_HEAD,
class... t_TAIL>
7365 BloombergLP::bslmf::MovableRef<Variant_Base> rhs)
7368 if (&lvalue !=
this) {
7369 if (this->d_type == lvalue.
d_type) {
7372 BloombergLP::bslstl::Variant_MoveAssignVisitor<Variant>
7375 void, moveAssign,
static_cast<Variant&
>(lvalue));
7381 BloombergLP::bslstl::Variant_MoveConstructVisitor<Variant_Base>
7382 moveConstructor(
this);
7384 void, moveConstructor,
static_cast<Variant&
>(lvalue));
7391template <
class t_HEAD,
class... t_TAIL>
7395 BloombergLP::bslstl::Variant_DestructorVisitor destructor;
7411#ifdef BSL_VARIANT_FULL_IMPLEMENTATION
7412template <
class t_HEAD,
class... t_TAIL>
7413template <
class t_TYPE>
7415variant<t_HEAD, t_TAIL...>::variant(
7421 std::forward<t_TYPE>(value))
7425template <
class t_HEAD,
class... t_TAIL>
7426template <
class t_TYPE>
7428variant<t_HEAD, t_TAIL...>::variant(
7430 allocator_type allocator,
7434 bsl::allocator_arg_t{},
7438 std::forward<t_TYPE>(value))
7442#if !BSLS_COMPILERFEATURES_SIMULATE_CPP11_FEATURES
7443template <
class t_HEAD,
class... t_TAIL>
7450template <
class t_HEAD,
class... t_TAIL>
7453: Variant_Base(original)
7457template <
class t_HEAD,
class... t_TAIL>
7460 BloombergLP::bslmf::MovableRef<variant> original)
7461: Variant_Base(original)
7465template <
class t_HEAD,
class... t_TAIL>
7466template <
class t_TYPE>
7469 const t_TYPE& value,
7478template <
class t_HEAD,
class... t_TAIL>
7479template <
class t_TYPE>
7489template <
class t_HEAD,
class... t_TAIL>
7490template <
class t_TYPE,
class t_ARG_01>
7494 const t_ARG_01& arg_01,
7502template <
class t_HEAD,
class... t_TAIL>
7503template <
class t_TYPE,
class t_ARG_01,
class t_ARG_02>
7507 const t_ARG_01& arg_01,
7508 const t_ARG_02& arg_02,
7517template <
class t_HEAD,
class... t_TAIL>
7518template <
class t_TYPE,
class t_ARG_01,
class t_ARG_02,
class t_ARG_03>
7522 const t_ARG_01& arg_01,
7523 const t_ARG_02& arg_02,
7524 const t_ARG_03& arg_03,
7534template <
class t_HEAD,
class... t_TAIL>
7535template <
class t_TYPE,
7543 const t_ARG_01& arg_01,
7544 const t_ARG_02& arg_02,
7545 const t_ARG_03& arg_03,
7546 const t_ARG_04& arg_04,
7557template <
class t_HEAD,
class... t_TAIL>
7558template <
class t_TYPE,
7567 const t_ARG_01& arg_01,
7568 const t_ARG_02& arg_02,
7569 const t_ARG_03& arg_03,
7570 const t_ARG_04& arg_04,
7571 const t_ARG_05& arg_05,
7583template <
class t_HEAD,
class... t_TAIL>
7584template <
class t_TYPE,
7594 const t_ARG_01& arg_01,
7595 const t_ARG_02& arg_02,
7596 const t_ARG_03& arg_03,
7597 const t_ARG_04& arg_04,
7598 const t_ARG_05& arg_05,
7599 const t_ARG_06& arg_06,
7612template <
class t_HEAD,
class... t_TAIL>
7613template <
class t_TYPE,
7624 const t_ARG_01& arg_01,
7625 const t_ARG_02& arg_02,
7626 const t_ARG_03& arg_03,
7627 const t_ARG_04& arg_04,
7628 const t_ARG_05& arg_05,
7629 const t_ARG_06& arg_06,
7630 const t_ARG_07& arg_07,
7644template <
class t_HEAD,
class... t_TAIL>
7645template <
class t_TYPE,
7657 const t_ARG_01& arg_01,
7658 const t_ARG_02& arg_02,
7659 const t_ARG_03& arg_03,
7660 const t_ARG_04& arg_04,
7661 const t_ARG_05& arg_05,
7662 const t_ARG_06& arg_06,
7663 const t_ARG_07& arg_07,
7664 const t_ARG_08& arg_08,
7679template <
class t_HEAD,
class... t_TAIL>
7680template <
class t_TYPE,
7693 const t_ARG_01& arg_01,
7694 const t_ARG_02& arg_02,
7695 const t_ARG_03& arg_03,
7696 const t_ARG_04& arg_04,
7697 const t_ARG_05& arg_05,
7698 const t_ARG_06& arg_06,
7699 const t_ARG_07& arg_07,
7700 const t_ARG_08& arg_08,
7701 const t_ARG_09& arg_09,
7717template <
class t_HEAD,
class... t_TAIL>
7718template <
class t_TYPE,
7732 const t_ARG_01& arg_01,
7733 const t_ARG_02& arg_02,
7734 const t_ARG_03& arg_03,
7735 const t_ARG_04& arg_04,
7736 const t_ARG_05& arg_05,
7737 const t_ARG_06& arg_06,
7738 const t_ARG_07& arg_07,
7739 const t_ARG_08& arg_08,
7740 const t_ARG_09& arg_09,
7741 const t_ARG_10& arg_10,
7758template <
class t_HEAD,
class... t_TAIL>
7759template <
size_t t_INDEX>
7766template <
class t_HEAD,
class... t_TAIL>
7767template <
size_t t_INDEX,
class t_ARG_01>
7770 const t_ARG_01& arg_01)
7775template <
class t_HEAD,
class... t_TAIL>
7776template <
size_t t_INDEX,
class t_ARG_01,
class t_ARG_02>
7779 const t_ARG_01& arg_01,
7780 const t_ARG_02& arg_02)
7785template <
class t_HEAD,
class... t_TAIL>
7786template <
size_t t_INDEX,
class t_ARG_01,
class t_ARG_02,
class t_ARG_03>
7789 const t_ARG_01& arg_01,
7790 const t_ARG_02& arg_02,
7791 const t_ARG_03& arg_03)
7796template <
class t_HEAD,
class... t_TAIL>
7797template <
size_t t_INDEX,
7804 const t_ARG_01& arg_01,
7805 const t_ARG_02& arg_02,
7806 const t_ARG_03& arg_03,
7807 const t_ARG_04& arg_04)
7816template <
class t_HEAD,
class... t_TAIL>
7817template <
size_t t_INDEX,
7825 const t_ARG_01& arg_01,
7826 const t_ARG_02& arg_02,
7827 const t_ARG_03& arg_03,
7828 const t_ARG_04& arg_04,
7829 const t_ARG_05& arg_05)
7839template <
class t_HEAD,
class... t_TAIL>
7840template <
size_t t_INDEX,
7849 const t_ARG_01& arg_01,
7850 const t_ARG_02& arg_02,
7851 const t_ARG_03& arg_03,
7852 const t_ARG_04& arg_04,
7853 const t_ARG_05& arg_05,
7854 const t_ARG_06& arg_06)
7865template <
class t_HEAD,
class... t_TAIL>
7866template <
size_t t_INDEX,
7876 const t_ARG_01& arg_01,
7877 const t_ARG_02& arg_02,
7878 const t_ARG_03& arg_03,
7879 const t_ARG_04& arg_04,
7880 const t_ARG_05& arg_05,
7881 const t_ARG_06& arg_06,
7882 const t_ARG_07& arg_07)
7894template <
class t_HEAD,
class... t_TAIL>
7895template <
size_t t_INDEX,
7906 const t_ARG_01& arg_01,
7907 const t_ARG_02& arg_02,
7908 const t_ARG_03& arg_03,
7909 const t_ARG_04& arg_04,
7910 const t_ARG_05& arg_05,
7911 const t_ARG_06& arg_06,
7912 const t_ARG_07& arg_07,
7913 const t_ARG_08& arg_08)
7926template <
class t_HEAD,
class... t_TAIL>
7927template <
size_t t_INDEX,
7939 const t_ARG_01& arg_01,
7940 const t_ARG_02& arg_02,
7941 const t_ARG_03& arg_03,
7942 const t_ARG_04& arg_04,
7943 const t_ARG_05& arg_05,
7944 const t_ARG_06& arg_06,
7945 const t_ARG_07& arg_07,
7946 const t_ARG_08& arg_08,
7947 const t_ARG_09& arg_09)
7961template <
class t_HEAD,
class... t_TAIL>
7962template <
size_t t_INDEX,
7975 const t_ARG_01& arg_01,
7976 const t_ARG_02& arg_02,
7977 const t_ARG_03& arg_03,
7978 const t_ARG_04& arg_04,
7979 const t_ARG_05& arg_05,
7980 const t_ARG_06& arg_06,
7981 const t_ARG_07& arg_07,
7982 const t_ARG_08& arg_08,
7983 const t_ARG_09& arg_09,
7984 const t_ARG_10& arg_10)
7999template <
class t_HEAD,
class... t_TAIL>
8007template <
class t_HEAD,
class... t_TAIL>
8016template <
class t_HEAD,
class... t_TAIL>
8021 BloombergLP::bslmf::MovableRef<variant> original)
8026template <
class t_HEAD,
class... t_TAIL>
8027template <
class t_TYPE>
8032 const t_TYPE& value,
8043template <
class t_HEAD,
class... t_TAIL>
8044template <
class t_TYPE>
8058template <
class t_HEAD,
class... t_TAIL>
8059template <
class t_TYPE,
class t_ARG_01>
8065 const t_ARG_01& arg_01,
8075template <
class t_HEAD,
class... t_TAIL>
8076template <
class t_TYPE,
class t_ARG_01,
class t_ARG_02>
8082 const t_ARG_01& arg_01,
8083 const t_ARG_02& arg_02,
8094template <
class t_HEAD,
class... t_TAIL>
8095template <
class t_TYPE,
class t_ARG_01,
class t_ARG_02,
class t_ARG_03>
8101 const t_ARG_01& arg_01,
8102 const t_ARG_02& arg_02,
8103 const t_ARG_03& arg_03,
8115template <
class t_HEAD,
class... t_TAIL>
8116template <
class t_TYPE,
8126 const t_ARG_01& arg_01,
8127 const t_ARG_02& arg_02,
8128 const t_ARG_03& arg_03,
8129 const t_ARG_04& arg_04,
8142template <
class t_HEAD,
class... t_TAIL>
8143template <
class t_TYPE,
8154 const t_ARG_01& arg_01,
8155 const t_ARG_02& arg_02,
8156 const t_ARG_03& arg_03,
8157 const t_ARG_04& arg_04,
8158 const t_ARG_05& arg_05,
8172template <
class t_HEAD,
class... t_TAIL>
8173template <
class t_TYPE,
8185 const t_ARG_01& arg_01,
8186 const t_ARG_02& arg_02,
8187 const t_ARG_03& arg_03,
8188 const t_ARG_04& arg_04,
8189 const t_ARG_05& arg_05,
8190 const t_ARG_06& arg_06,
8205template <
class t_HEAD,
class... t_TAIL>
8206template <
class t_TYPE,
8219 const t_ARG_01& arg_01,
8220 const t_ARG_02& arg_02,
8221 const t_ARG_03& arg_03,
8222 const t_ARG_04& arg_04,
8223 const t_ARG_05& arg_05,
8224 const t_ARG_06& arg_06,
8225 const t_ARG_07& arg_07,
8241template <
class t_HEAD,
class... t_TAIL>
8242template <
class t_TYPE,
8256 const t_ARG_01& arg_01,
8257 const t_ARG_02& arg_02,
8258 const t_ARG_03& arg_03,
8259 const t_ARG_04& arg_04,
8260 const t_ARG_05& arg_05,
8261 const t_ARG_06& arg_06,
8262 const t_ARG_07& arg_07,
8263 const t_ARG_08& arg_08,
8280template <
class t_HEAD,
class... t_TAIL>
8281template <
class t_TYPE,
8296 const t_ARG_01& arg_01,
8297 const t_ARG_02& arg_02,
8298 const t_ARG_03& arg_03,
8299 const t_ARG_04& arg_04,
8300 const t_ARG_05& arg_05,
8301 const t_ARG_06& arg_06,
8302 const t_ARG_07& arg_07,
8303 const t_ARG_08& arg_08,
8304 const t_ARG_09& arg_09,
8322template <
class t_HEAD,
class... t_TAIL>
8323template <
class t_TYPE,
8339 const t_ARG_01& arg_01,
8340 const t_ARG_02& arg_02,
8341 const t_ARG_03& arg_03,
8342 const t_ARG_04& arg_04,
8343 const t_ARG_05& arg_05,
8344 const t_ARG_06& arg_06,
8345 const t_ARG_07& arg_07,
8346 const t_ARG_08& arg_08,
8347 const t_ARG_09& arg_09,
8348 const t_ARG_10& arg_10,
8367template <
class t_HEAD,
class... t_TAIL>
8368template <
size_t t_INDEX>
8379template <
class t_HEAD,
class... t_TAIL>
8380template <
size_t t_INDEX,
class t_ARG_01>
8385 const t_ARG_01& arg_01)
8393template <
class t_HEAD,
class... t_TAIL>
8394template <
size_t t_INDEX,
class t_ARG_01,
class t_ARG_02>
8399 const t_ARG_01& arg_01,
8400 const t_ARG_02& arg_02)
8409template <
class t_HEAD,
class... t_TAIL>
8410template <
size_t t_INDEX,
class t_ARG_01,
class t_ARG_02,
class t_ARG_03>
8415 const t_ARG_01& arg_01,
8416 const t_ARG_02& arg_02,
8417 const t_ARG_03& arg_03)
8427template <
class t_HEAD,
class... t_TAIL>
8428template <
size_t t_INDEX,
8437 const t_ARG_01& arg_01,
8438 const t_ARG_02& arg_02,
8439 const t_ARG_03& arg_03,
8440 const t_ARG_04& arg_04)
8451template <
class t_HEAD,
class... t_TAIL>
8452template <
size_t t_INDEX,
8462 const t_ARG_01& arg_01,
8463 const t_ARG_02& arg_02,
8464 const t_ARG_03& arg_03,
8465 const t_ARG_04& arg_04,
8466 const t_ARG_05& arg_05)
8478template <
class t_HEAD,
class... t_TAIL>
8479template <
size_t t_INDEX,
8490 const t_ARG_01& arg_01,
8491 const t_ARG_02& arg_02,
8492 const t_ARG_03& arg_03,
8493 const t_ARG_04& arg_04,
8494 const t_ARG_05& arg_05,
8495 const t_ARG_06& arg_06)
8508template <
class t_HEAD,
class... t_TAIL>
8509template <
size_t t_INDEX,
8521 const t_ARG_01& arg_01,
8522 const t_ARG_02& arg_02,
8523 const t_ARG_03& arg_03,
8524 const t_ARG_04& arg_04,
8525 const t_ARG_05& arg_05,
8526 const t_ARG_06& arg_06,
8527 const t_ARG_07& arg_07)
8541template <
class t_HEAD,
class... t_TAIL>
8542template <
size_t t_INDEX,
8555 const t_ARG_01& arg_01,
8556 const t_ARG_02& arg_02,
8557 const t_ARG_03& arg_03,
8558 const t_ARG_04& arg_04,
8559 const t_ARG_05& arg_05,
8560 const t_ARG_06& arg_06,
8561 const t_ARG_07& arg_07,
8562 const t_ARG_08& arg_08)
8577template <
class t_HEAD,
class... t_TAIL>
8578template <
size_t t_INDEX,
8592 const t_ARG_01& arg_01,
8593 const t_ARG_02& arg_02,
8594 const t_ARG_03& arg_03,
8595 const t_ARG_04& arg_04,
8596 const t_ARG_05& arg_05,
8597 const t_ARG_06& arg_06,
8598 const t_ARG_07& arg_07,
8599 const t_ARG_08& arg_08,
8600 const t_ARG_09& arg_09)
8616template <
class t_HEAD,
class... t_TAIL>
8617template <
size_t t_INDEX,
8632 const t_ARG_01& arg_01,
8633 const t_ARG_02& arg_02,
8634 const t_ARG_03& arg_03,
8635 const t_ARG_04& arg_04,
8636 const t_ARG_05& arg_05,
8637 const t_ARG_06& arg_06,
8638 const t_ARG_07& arg_07,
8639 const t_ARG_08& arg_08,
8640 const t_ARG_09& arg_09,
8641 const t_ARG_10& arg_10)
8658template <
class t_HEAD,
class... t_TAIL>
8659template <
class t_TYPE>
8660typename bsl::enable_if<BloombergLP::bslstl::Variant_HasUniqueType<
8662 variant<t_HEAD, t_TAIL...> >::value,
8668 Variant_Base::template baseEmplace<index>();
8670 return bsl::get<index>(*
this);
8673template <
class t_HEAD,
class... t_TAIL>
8674template <
class t_TYPE,
class t_ARG_01>
8675typename bsl::enable_if<BloombergLP::bslstl::Variant_HasUniqueType<
8677 variant<t_HEAD, t_TAIL...> >::value,
8683 Variant_Base::template baseEmplace<index>(arg_01);
8685 return bsl::get<index>(*
this);
8688template <
class t_HEAD,
class... t_TAIL>
8689template <
class t_TYPE,
class t_ARG_01,
class t_ARG_02>
8690typename bsl::enable_if<BloombergLP::bslstl::Variant_HasUniqueType<
8692 variant<t_HEAD, t_TAIL...> >::value,
8695 const t_ARG_02& arg_02)
8699 Variant_Base::template baseEmplace<index>(arg_01, arg_02);
8701 return bsl::get<index>(*
this);
8704template <
class t_HEAD,
class... t_TAIL>
8705template <
class t_TYPE,
class t_ARG_01,
class t_ARG_02,
class t_ARG_03>
8706typename bsl::enable_if<BloombergLP::bslstl::Variant_HasUniqueType<
8708 variant<t_HEAD, t_TAIL...> >::value,
8711 const t_ARG_02& arg_02,
8712 const t_ARG_03& arg_03)
8716 Variant_Base::template baseEmplace<index>(arg_01, arg_02, arg_03);
8718 return bsl::get<index>(*
this);
8721template <
class t_HEAD,
class... t_TAIL>
8722template <
class t_TYPE,
8727typename bsl::enable_if<BloombergLP::bslstl::Variant_HasUniqueType<
8729 variant<t_HEAD, t_TAIL...> >::value,
8732 const t_ARG_02& arg_02,
8733 const t_ARG_03& arg_03,
8734 const t_ARG_04& arg_04)
8738 Variant_Base::template baseEmplace<index>(arg_01, arg_02, arg_03, arg_04);
8740 return bsl::get<index>(*
this);
8743template <
class t_HEAD,
class... t_TAIL>
8744template <
class t_TYPE,
8750typename bsl::enable_if<BloombergLP::bslstl::Variant_HasUniqueType<
8752 variant<t_HEAD, t_TAIL...> >::value,
8755 const t_ARG_02& arg_02,
8756 const t_ARG_03& arg_03,
8757 const t_ARG_04& arg_04,
8758 const t_ARG_05& arg_05)
8762 Variant_Base::template baseEmplace<index>(
8763 arg_01, arg_02, arg_03, arg_04, arg_05);
8765 return bsl::get<index>(*
this);
8768template <
class t_HEAD,
class... t_TAIL>
8769template <
class t_TYPE,
8776typename bsl::enable_if<BloombergLP::bslstl::Variant_HasUniqueType<
8778 variant<t_HEAD, t_TAIL...> >::value,
8781 const t_ARG_02& arg_02,
8782 const t_ARG_03& arg_03,
8783 const t_ARG_04& arg_04,
8784 const t_ARG_05& arg_05,
8785 const t_ARG_06& arg_06)
8789 Variant_Base::template baseEmplace<index>(
8790 arg_01, arg_02, arg_03, arg_04, arg_05, arg_06);
8792 return bsl::get<index>(*
this);
8795template <
class t_HEAD,
class... t_TAIL>
8796template <
class t_TYPE,
8804typename bsl::enable_if<BloombergLP::bslstl::Variant_HasUniqueType<
8806 variant<t_HEAD, t_TAIL...> >::value,
8809 const t_ARG_02& arg_02,
8810 const t_ARG_03& arg_03,
8811 const t_ARG_04& arg_04,
8812 const t_ARG_05& arg_05,
8813 const t_ARG_06& arg_06,
8814 const t_ARG_07& arg_07)
8818 Variant_Base::template baseEmplace<index>(
8819 arg_01, arg_02, arg_03, arg_04, arg_05, arg_06, arg_07);
8821 return bsl::get<index>(*
this);
8824template <
class t_HEAD,
class... t_TAIL>
8825template <
class t_TYPE,
8834typename bsl::enable_if<BloombergLP::bslstl::Variant_HasUniqueType<
8836 variant<t_HEAD, t_TAIL...> >::value,
8839 const t_ARG_02& arg_02,
8840 const t_ARG_03& arg_03,
8841 const t_ARG_04& arg_04,
8842 const t_ARG_05& arg_05,
8843 const t_ARG_06& arg_06,
8844 const t_ARG_07& arg_07,
8845 const t_ARG_08& arg_08)
8849 Variant_Base::template baseEmplace<index>(
8850 arg_01, arg_02, arg_03, arg_04, arg_05, arg_06, arg_07, arg_08);
8852 return bsl::get<index>(*
this);
8855template <
class t_HEAD,
class... t_TAIL>
8856template <
class t_TYPE,
8866typename bsl::enable_if<BloombergLP::bslstl::Variant_HasUniqueType<
8868 variant<t_HEAD, t_TAIL...> >::value,
8871 const t_ARG_02& arg_02,
8872 const t_ARG_03& arg_03,
8873 const t_ARG_04& arg_04,
8874 const t_ARG_05& arg_05,
8875 const t_ARG_06& arg_06,
8876 const t_ARG_07& arg_07,
8877 const t_ARG_08& arg_08,
8878 const t_ARG_09& arg_09)
8882 Variant_Base::template baseEmplace<index>(arg_01,
8892 return bsl::get<index>(*
this);
8895template <
class t_HEAD,
class... t_TAIL>
8896template <
class t_TYPE,
8907typename bsl::enable_if<BloombergLP::bslstl::Variant_HasUniqueType<
8909 variant<t_HEAD, t_TAIL...> >::value,
8912 const t_ARG_02& arg_02,
8913 const t_ARG_03& arg_03,
8914 const t_ARG_04& arg_04,
8915 const t_ARG_05& arg_05,
8916 const t_ARG_06& arg_06,
8917 const t_ARG_07& arg_07,
8918 const t_ARG_08& arg_08,
8919 const t_ARG_09& arg_09,
8920 const t_ARG_10& arg_10)
8924 Variant_Base::template baseEmplace<index>(arg_01,
8935 return bsl::get<index>(*
this);
8938template <
class t_HEAD,
class... t_TAIL>
8939template <
size_t t_INDEX>
8943 Variant_Base::template baseEmplace<t_INDEX>();
8945 return bsl::get<t_INDEX>(*
this);
8948template <
class t_HEAD,
class... t_TAIL>
8949template <
size_t t_INDEX,
class t_ARG_01>
8953 Variant_Base::template baseEmplace<t_INDEX>(arg_01);
8955 return bsl::get<t_INDEX>(*
this);
8958template <
class t_HEAD,
class... t_TAIL>
8959template <
size_t t_INDEX,
class t_ARG_01,
class t_ARG_02>
8962 const t_ARG_02& arg_02)
8964 Variant_Base::template baseEmplace<t_INDEX>(arg_01, arg_02);
8966 return bsl::get<t_INDEX>(*
this);
8969template <
class t_HEAD,
class... t_TAIL>
8970template <
size_t t_INDEX,
class t_ARG_01,
class t_ARG_02,
class t_ARG_03>
8973 const t_ARG_02& arg_02,
8974 const t_ARG_03& arg_03)
8976 Variant_Base::template baseEmplace<t_INDEX>(arg_01, arg_02, arg_03);
8978 return bsl::get<t_INDEX>(*
this);
8981template <
class t_HEAD,
class... t_TAIL>
8982template <
size_t t_INDEX,
8989 const t_ARG_02& arg_02,
8990 const t_ARG_03& arg_03,
8991 const t_ARG_04& arg_04)
8993 Variant_Base::template baseEmplace<t_INDEX>(
8994 arg_01, arg_02, arg_03, arg_04);
8996 return bsl::get<t_INDEX>(*
this);
8999template <
class t_HEAD,
class... t_TAIL>
9000template <
size_t t_INDEX,
9008 const t_ARG_02& arg_02,
9009 const t_ARG_03& arg_03,
9010 const t_ARG_04& arg_04,
9011 const t_ARG_05& arg_05)
9013 Variant_Base::template baseEmplace<t_INDEX>(
9014 arg_01, arg_02, arg_03, arg_04, arg_05);
9016 return bsl::get<t_INDEX>(*
this);
9019template <
class t_HEAD,
class... t_TAIL>
9020template <
size_t t_INDEX,
9029 const t_ARG_02& arg_02,
9030 const t_ARG_03& arg_03,
9031 const t_ARG_04& arg_04,
9032 const t_ARG_05& arg_05,
9033 const t_ARG_06& arg_06)
9035 Variant_Base::template baseEmplace<t_INDEX>(
9036 arg_01, arg_02, arg_03, arg_04, arg_05, arg_06);
9038 return bsl::get<t_INDEX>(*
this);
9041template <
class t_HEAD,
class... t_TAIL>
9042template <
size_t t_INDEX,
9052 const t_ARG_02& arg_02,
9053 const t_ARG_03& arg_03,
9054 const t_ARG_04& arg_04,
9055 const t_ARG_05& arg_05,
9056 const t_ARG_06& arg_06,
9057 const t_ARG_07& arg_07)
9059 Variant_Base::template baseEmplace<t_INDEX>(
9060 arg_01, arg_02, arg_03, arg_04, arg_05, arg_06, arg_07);
9062 return bsl::get<t_INDEX>(*
this);
9065template <
class t_HEAD,
class... t_TAIL>
9066template <
size_t t_INDEX,
9077 const t_ARG_02& arg_02,
9078 const t_ARG_03& arg_03,
9079 const t_ARG_04& arg_04,
9080 const t_ARG_05& arg_05,
9081 const t_ARG_06& arg_06,
9082 const t_ARG_07& arg_07,
9083 const t_ARG_08& arg_08)
9085 Variant_Base::template baseEmplace<t_INDEX>(
9086 arg_01, arg_02, arg_03, arg_04, arg_05, arg_06, arg_07, arg_08);
9088 return bsl::get<t_INDEX>(*
this);
9091template <
class t_HEAD,
class... t_TAIL>
9092template <
size_t t_INDEX,
9104 const t_ARG_02& arg_02,
9105 const t_ARG_03& arg_03,
9106 const t_ARG_04& arg_04,
9107 const t_ARG_05& arg_05,
9108 const t_ARG_06& arg_06,
9109 const t_ARG_07& arg_07,
9110 const t_ARG_08& arg_08,
9111 const t_ARG_09& arg_09)
9113 Variant_Base::template baseEmplace<t_INDEX>(arg_01,
9123 return bsl::get<t_INDEX>(*
this);
9126template <
class t_HEAD,
class... t_TAIL>
9127template <
size_t t_INDEX,
9140 const t_ARG_02& arg_02,
9141 const t_ARG_03& arg_03,
9142 const t_ARG_04& arg_04,
9143 const t_ARG_05& arg_05,
9144 const t_ARG_06& arg_06,
9145 const t_ARG_07& arg_07,
9146 const t_ARG_08& arg_08,
9147 const t_ARG_09& arg_09,
9148 const t_ARG_10& arg_10)
9150 Variant_Base::template baseEmplace<t_INDEX>(arg_01,
9161 return bsl::get<t_INDEX>(*
this);
9164template <
class t_HEAD,
class... t_TAIL>
9169 Variant_Base::operator=(
static_cast<const Variant_Base&
>(
rhs));
9173template <
class t_HEAD,
class... t_TAIL>
9176 BloombergLP::bslmf::MovableRef<variant>
rhs)
9179 Variant_Base::operator=(
9180 MoveUtil::move(
static_cast<Variant_Base&
>(lvalue)));
9183template <
class t_HEAD,
class... t_TAIL>
9184template <
class t_TYPE>
9187 BloombergLP::bslstl::Variant_AssignsFromType<
variant<t_HEAD, t_TAIL...>,
9189 variant<t_HEAD, t_TAIL...>&>::type
9194 if (index() == altIndex) {
9195 bsl::get<altIndex>(*
this) =
rhs;
9200 emplace<altIndex>(
rhs);
9208#if !BSLS_COMPILERFEATURES_SIMULATE_CPP11_FEATURES
9209template <
class t_HEAD,
class... t_TAIL>
9213 if (!valueless_by_exception()) {
9214 if (index() == other.
index()) {
9215 BloombergLP::bslstl::Variant_SwapVisitor<variant> swapper(
this);
9219 variant tmpThis(MoveUtil::move(*
this));
9222 BloombergLP::bslstl::Variant_MoveConstructVisitor<Variant_Base>
9223 moveConstructor(
this);
9226#ifndef BSL_VARIANT_FULL_IMPLEMENTATION
9230 this->d_type = other.
index();
9233 BloombergLP::bslstl::Variant_MoveConstructVisitor<Variant_Base>
9236#ifndef BSL_VARIANT_FULL_IMPLEMENTATION
9237 other.d_type = tmpThis.
index();
9243 BloombergLP::bslstl::Variant_MoveConstructVisitor<Variant_Base>
9244 moveConstructor(
this);
9246#ifndef BSL_VARIANT_FULL_IMPLEMENTATION
9247 this->d_type = other.
index();
9255template <
class t_HEAD,
class... t_TAIL>
9259 return this->d_type;
9262template <
class t_HEAD,
class... t_TAIL>
9273#ifdef BSL_VARIANT_FULL_IMPLEMENTATION
9274template <
size_t t_INDEX,
class t_HEAD,
class... t_TAIL>
9280 typedef typename bsl::variant<t_HEAD, t_TAIL...> Variant;
9281 typedef BloombergLP::bslstl::Variant_ImpUtil ImpUtil;
9284 return ImpUtil::get<Ret, t_INDEX>(obj);
9287template <
size_t t_INDEX,
class t_HEAD,
class... t_TAIL>
9288const typename variant_alternative<t_INDEX, variant<t_HEAD, t_TAIL...> >::type&
9289get(
const variant<t_HEAD, t_TAIL...>& obj)
9291 BSLMF_ASSERT((t_INDEX < variant_size<variant<t_HEAD, t_TAIL...> >::value));
9293 typedef typename bsl::variant<t_HEAD, t_TAIL...> Variant;
9294 typedef BloombergLP::bslstl::Variant_ImpUtil ImpUtil;
9297 return ImpUtil::get<const Ret, t_INDEX>(obj);
9300template <
size_t t_INDEX,
class t_HEAD,
class... t_TAIL>
9301typename variant_alternative<t_INDEX, variant<t_HEAD, t_TAIL...> >::type&&
get(
9302 variant<t_HEAD, t_TAIL...>&& obj)
9304 BSLMF_ASSERT((t_INDEX < variant_size<variant<t_HEAD, t_TAIL...> >::value));
9306 typedef typename bsl::variant<t_HEAD, t_TAIL...> Variant;
9307 typedef BloombergLP::bslstl::Variant_ImpUtil ImpUtil;
9310 return std::move(ImpUtil::get<Ret, t_INDEX>(obj));
9313template <
size_t t_INDEX,
class t_HEAD,
class... t_TAIL>
9314const typename variant_alternative<t_INDEX,
9315 variant<t_HEAD, t_TAIL...> >::type&&
9316get(
const variant<t_HEAD, t_TAIL...>&& obj)
9318 BSLMF_ASSERT((t_INDEX < variant_size<variant<t_HEAD, t_TAIL...> >::value));
9320 typedef typename bsl::variant<t_HEAD, t_TAIL...> Variant;
9321 typedef BloombergLP::bslstl::Variant_ImpUtil ImpUtil;
9324 return std::move(ImpUtil::get<const Ret, t_INDEX>(obj));
9327#if !BSLS_COMPILERFEATURES_SIMULATE_CPP11_FEATURES
9328template <
size_t t_INDEX,
class t_VARIANT>
9329typename Variant_GetIndexReturnType<t_INDEX, t_VARIANT>::type
9334 typedef BloombergLP::bslstl::Variant_ImpUtil ImpUtil;
9337 return ImpUtil::get<Ret, t_INDEX>(obj);
9340template <
size_t t_INDEX,
class t_VARIANT>
9341typename Variant_GetIndexReturnType<
9343 BloombergLP::bslmf::MovableRef<t_VARIANT> >::type
9344get(BloombergLP::bslmf::MovableRef<t_VARIANT> obj)
9346 typedef BloombergLP::bslmf::MovableRefUtil MoveUtil;
9347 typedef BloombergLP::bslstl::Variant_ImpUtil ImpUtil;
9350 t_VARIANT& lvalue = obj;
9352 return MoveUtil::move(ImpUtil::get<Ret, t_INDEX>(lvalue));
9357#ifdef BSL_VARIANT_FULL_IMPLEMENTATION
9358template <
class t_TYPE,
class t_HEAD,
class... t_TAIL>
9359t_TYPE&
get(variant<t_HEAD, t_TAIL...>& obj)
9361 BSLMF_ASSERT((BloombergLP::bslstl::Variant_HasUniqueType<
9363 variant<t_HEAD, t_TAIL...> >::value));
9365 typedef typename bsl::variant<t_HEAD, t_TAIL...> Variant;
9366 typedef BloombergLP::bslstl::Variant_ImpUtil ImpUtil;
9368 return ImpUtil::get<t_TYPE, BSLSTL_VARIANT_INDEX_OF(t_TYPE, Variant)>(obj);
9371template <
class t_TYPE,
class t_HEAD,
class... t_TAIL>
9372const t_TYPE&
get(
const variant<t_HEAD, t_TAIL...>& obj)
9374 BSLMF_ASSERT((BloombergLP::bslstl::Variant_HasUniqueType<
9376 variant<t_HEAD, t_TAIL...> >::value));
9378 typedef typename bsl::variant<t_HEAD, t_TAIL...> Variant;
9379 typedef BloombergLP::bslstl::Variant_ImpUtil ImpUtil;
9381 return ImpUtil::get<
const t_TYPE,
9385template <
class t_TYPE,
class t_HEAD,
class... t_TAIL>
9386t_TYPE&&
get(variant<t_HEAD, t_TAIL...>&& obj)
9389 BloombergLP::bslstl::
9390 Variant_HasUniqueType<t_TYPE, variant<t_HEAD, t_TAIL...> >::value,
9391 "Type is not unique in variant");
9393 typedef typename bsl::variant<t_HEAD, t_TAIL...> Variant;
9394 typedef BloombergLP::bslstl::Variant_ImpUtil ImpUtil;
9400template <
class t_TYPE,
class t_HEAD,
class... t_TAIL>
9401const t_TYPE&&
get(
const variant<t_HEAD, t_TAIL...>&& obj)
9404 BloombergLP::bslstl::
9405 Variant_HasUniqueType<t_TYPE, variant<t_HEAD, t_TAIL...> >::value,
9406 "Type is not unique in variant");
9408 typedef typename bsl::variant<t_HEAD, t_TAIL...> Variant;
9409 typedef BloombergLP::bslstl::Variant_ImpUtil ImpUtil;
9416#if !BSLS_COMPILERFEATURES_SIMULATE_CPP11_FEATURES
9417template <
class t_TYPE,
class t_VARIANT>
9418typename Variant_GetTypeReturnType<t_TYPE&, t_VARIANT>::type
9422 BloombergLP::bslstl::Variant_HasUniqueType<t_TYPE, t_VARIANT>::value));
9424 typedef BloombergLP::bslstl::Variant_ImpUtil ImpUtil;
9426 return ImpUtil::get<t_TYPE, BSLSTL_VARIANT_INDEX_OF(t_TYPE, t_VARIANT)>(
9430template <
class t_TYPE,
class t_VARIANT>
9431typename Variant_GetTypeReturnType<const t_TYPE&, t_VARIANT>::type
9435 BloombergLP::bslstl::Variant_HasUniqueType<t_TYPE, t_VARIANT>::value));
9437 typedef BloombergLP::bslstl::Variant_ImpUtil ImpUtil;
9439 return ImpUtil::get<
const t_TYPE,
9443template <
class t_TYPE,
class t_VARIANT>
9444typename Variant_GetTypeReturnType<BloombergLP::bslmf::MovableRef<t_TYPE>,
9446get(BloombergLP::bslmf::MovableRef<t_VARIANT> obj)
9449 BloombergLP::bslstl::Variant_HasUniqueType<t_TYPE, t_VARIANT>::value));
9451 typedef BloombergLP::bslmf::MovableRefUtil MoveUtil;
9452 typedef BloombergLP::bslstl::Variant_ImpUtil ImpUtil;
9454 t_VARIANT& lvalue = obj;
9455 return MoveUtil::move(
9462#ifdef BSL_VARIANT_FULL_IMPLEMENTATION
9463template <
size_t t_INDEX,
class t_HEAD,
class... t_TAIL>
9464typename add_pointer<
9465 typename variant_alternative<t_INDEX,
9466 variant<t_HEAD, t_TAIL...> >::type>::type
9469 BSLMF_ASSERT((t_INDEX < variant_size<variant<t_HEAD, t_TAIL...> >::value));
9471 typedef typename bsl::variant<t_HEAD, t_TAIL...> Variant;
9472 typedef BloombergLP::bslstl::Variant_ImpUtil ImpUtil;
9475 if (ptr == 0 || ptr->index() != t_INDEX) {
9482template <
size_t t_INDEX,
class t_HEAD,
class... t_TAIL>
9483typename add_pointer<
const typename variant_alternative<
9485 variant<t_HEAD, t_TAIL...> >::type>::type
9488 BSLMF_ASSERT((t_INDEX < variant_size<variant<t_HEAD, t_TAIL...> >::value));
9490 typedef typename bsl::variant<t_HEAD, t_TAIL...> Variant;
9491 typedef BloombergLP::bslstl::Variant_ImpUtil ImpUtil;
9494 if (ptr == 0 || ptr->index() != t_INDEX) {
9500template <
class t_TYPE,
class t_HEAD,
class... t_TAIL>
9504 BSLMF_ASSERT((BloombergLP::bslstl::Variant_HasUniqueType<
9506 variant<t_HEAD, t_TAIL...> >::value));
9508 typedef typename bsl::variant<t_HEAD, t_TAIL...> Variant;
9509 typedef BloombergLP::bslstl::Variant_ImpUtil ImpUtil;
9518template <
class t_TYPE,
class t_HEAD,
class... t_TAIL>
9522 BSLMF_ASSERT((BloombergLP::bslstl::Variant_HasUniqueType<
9524 variant<t_HEAD, t_TAIL...> >::value));
9526 typedef typename bsl::variant<t_HEAD, t_TAIL...> Variant;
9527 typedef BloombergLP::bslstl::Variant_ImpUtil ImpUtil;
9537#if !BSLS_COMPILERFEATURES_SIMULATE_CPP11_FEATURES
9538template <
size_t t_INDEX,
class t_VARIANT>
9539typename Variant_GetIndexReturnType<t_INDEX, t_VARIANT>::pointer
9544 typedef BloombergLP::bslstl::Variant_ImpUtil ImpUtil;
9547 if (ptr == 0 || ptr->index() != t_INDEX) {
9554template <
class t_TYPE,
class t_VARIANT>
9555typename Variant_GetTypeReturnType<t_TYPE, t_VARIANT>::pointer
9559 BloombergLP::bslstl::Variant_HasUniqueType<t_TYPE, t_VARIANT>::value));
9561 typedef BloombergLP::bslstl::Variant_ImpUtil ImpUtil;
9572template <
class t_TYPE,
class t_VARIANT>
9573typename Variant_GetTypeReturnType<const t_TYPE, t_VARIANT>::pointer
9577 BloombergLP::bslstl::Variant_HasUniqueType<t_TYPE, t_VARIANT>::value));
9579 typedef BloombergLP::bslstl::Variant_ImpUtil ImpUtil;
9592#if !BSLS_COMPILERFEATURES_SIMULATE_CPP11_FEATURES
9594template <
class t_HASHALG,
class t_HEAD,
class... t_TAIL>
9599 BloombergLP::bslstl::Variant_HashVisitor<t_HASHALG> hashVisitor(
9601 visit(hashVisitor, input);
9608template <
class t_TYPE,
class t_HEAD,
class... t_TAIL>
9612 BSLMF_ASSERT((BloombergLP::bslstl::Variant_HasUniqueType<
9615 typedef typename bsl::variant<t_HEAD, t_TAIL...> Variant;
9619template <
class t_HEAD,
class... t_TAIL>
9623 BloombergLP::bslstl::variant_swapImpl(
9626 BloombergLP::bslstl::
9627 Variant_UsesBslmaAllocatorAny<t_HEAD, t_TAIL...>::value>(),
9633template <
class t_HEAD,
class... t_TAIL>
9637 typedef BloombergLP::bslstl::Variant_ImpUtil ImpUtil;
9639 if (
lhs.index() !=
rhs.index()) {
9642 else if (
lhs.valueless_by_exception()) {
9645 return ImpUtil::Equal(
lhs,
rhs);
9648template <
class t_HEAD,
class... t_TAIL>
9652 typedef BloombergLP::bslstl::Variant_ImpUtil ImpUtil;
9654 if (
lhs.index() !=
rhs.index()) {
9657 else if (
lhs.valueless_by_exception()) {
9660 return ImpUtil::NotEqual(
lhs,
rhs);
9663template <
class t_HEAD,
class... t_TAIL>
9667 typedef BloombergLP::bslstl::Variant_ImpUtil ImpUtil;
9669 if (
rhs.valueless_by_exception()) {
9672 else if (
lhs.valueless_by_exception()) {
9675 else if (
lhs.index() !=
rhs.index()) {
9676 return lhs.index() <
rhs.index();
9678 return ImpUtil::LessThan(
lhs,
rhs);
9681template <
class t_HEAD,
class... t_TAIL>
9685 typedef BloombergLP::bslstl::Variant_ImpUtil ImpUtil;
9687 if (
lhs.valueless_by_exception()) {
9690 else if (
rhs.valueless_by_exception()) {
9693 else if (
lhs.index() !=
rhs.index()) {
9694 return lhs.index() >
rhs.index();
9696 return ImpUtil::GreaterThan(
lhs,
rhs);
9699template <
class t_HEAD,
class... t_TAIL>
9703 typedef BloombergLP::bslstl::Variant_ImpUtil ImpUtil;
9705 if (
lhs.valueless_by_exception()) {
9708 else if (
rhs.valueless_by_exception()) {
9711 else if (
lhs.index() !=
rhs.index()) {
9712 return lhs.index() <
rhs.index();
9714 return ImpUtil::LessOrEqual(
lhs,
rhs);
9717template <
class t_HEAD,
class... t_TAIL>
9721 typedef BloombergLP::bslstl::Variant_ImpUtil ImpUtil;
9723 if (
rhs.valueless_by_exception()) {
9726 else if (
lhs.valueless_by_exception()) {
9729 else if (
lhs.index() !=
rhs.index()) {
9730 return lhs.index() >
rhs.index();
9733 return ImpUtil::GreaterOrEqual(
lhs,
rhs);
9736#if defined BSLS_COMPILERFEATURES_SUPPORT_THREE_WAY_COMPARISON && \
9737 defined BSLS_LIBRARYFEATURES_HAS_CPP20_CONCEPTS
9739template <
class... t_ALTS>
9740 requires(std::three_way_comparable<t_ALTS> && ...)
9741constexpr
std::common_comparison_category_t<
9742 std::compare_three_way_result_t<t_ALTS>...>
9743operator<=>(const variant<t_ALTS...>&
lhs, const variant<t_ALTS...>&
rhs)
9745 using RET = std::common_comparison_category_t<
9746 std::compare_three_way_result_t<t_ALTS>...>;
9748 const size_t lhs_index =
lhs.index();
9749 const size_t rhs_index =
rhs.index();
9751 if (lhs_index == rhs_index) {
9752 return BloombergLP::bslstl::Variant_ImpUtil::visitId<RET>(
9755 return bsl::get<t_INDEX>(
lhs) <=> rhs_value;
9760 return lhs_index <=> rhs_index;
9766 return std::strong_ordering::equal;
9768 return std::strong_ordering::less;
9771 return std::strong_ordering::greater;
9781#undef BSL_VARIANT_FULL_IMPLEMENTATION
9782#undef BSLSTL_VARIANT_NOT_A_TYPE
9783#undef BSLSTL_VARIANT_DEFINE_IF_CONSTRUCTS_FROM
9784#undef BSLSTL_VARIANT_DECLARE_IF_CONSTRUCTS_FROM
9785#undef BSLSTL_VARIANT_DEFINE_IF_HAS_UNIQUE_TYPE
9786#undef BSLSTL_VARIANT_DECLARE_IF_HAS_UNIQUE_TYPE
9787#undef BSLSTL_VARIANT_HAS_UNIQUE_TYPE
9788#undef BSLSTL_VARIANT_TYPE_AT_INDEX
9789#undef BSLSTL_VARIANT_INDEX_OF
9790#undef BSLSTL_VARIANT_CONVERT_INDEX_OF
9791#undef BSLSTL_VARIANT_CONVERT_TYPE_OF
9792#undef BSLSTL_VARIANT_VISITID
9793#undef BSLSTL_VARIANT_RELOP_VISITOR_DEFINITON
#define BSLSTL_VARIANT_DEFINE_IF_HAS_UNIQUE_TYPE(TYPE)
Definition bslstl_variant.h:903
#define BSLSTL_VARIANT_DEFINE_IF_CONSTRUCTS_FROM(VARIANT, TYPE)
Definition bslstl_variant.h:870
#define BSLSTL_VARIANT_DECLARE_IF_CONSTRUCTS_FROM_STD(STD_VARIANT)
Definition bslstl_variant.h:893
#define BSLSTL_VARIANT_HAS_UNIQUE_TYPE(TYPE)
Definition bslstl_variant.h:919
#define BSLSTL_VARIANT_DECLARE_IF_CONSTRUCTS_FROM(VARIANT, TYPE)
Definition bslstl_variant.h:879
#define BSLSTL_VARIANT_INDEX_OF(TYPE, VARIANT)
Definition bslstl_variant.h:933
#define BSLSTL_VARIANT_TYPE_AT_INDEX(INDEX)
Definition bslstl_variant.h:926
#define BSLSTL_VARIANT_RELOP_VISITOR_DEFINITON(NAME, OP)
Definition bslstl_variant.h:2866
#define BSLSTL_VARIANT_DECLARE_IF_HAS_UNIQUE_TYPE(TYPE)
Definition bslstl_variant.h:911
#define BSLSTL_VARIANT_VISITID(RET, VISITOR, VAROBJ)
Definition bslstl_variant.h:956
#define BSLSTL_VARIANT_CONVERT_INDEX_OF(TYPE, VARIANT)
Definition bslstl_variant.h:940
Definition bslma_bslallocator.h:588
BloombergLP::bslma::Allocator * mechanism() const
Definition bslma_bslallocator.h:1146
Definition bslmf_invokeresult.h:362
Definition bslstl_variant.h:3806
variant(bsl::allocator_arg_t, allocator_type allocator, bsl::in_place_index_t< t_INDEX >, const t_ARG_01 &arg_01, const t_ARG_02 &arg_02, const t_ARG_03 &arg_03, const t_ARG_04 &arg_04, const t_ARG_05 &arg_05, const t_ARG_06 &arg_06, const t_ARG_07 &arg_07, const t_ARG_08 &arg_08, const t_ARG_09 &arg_09)
Definition bslstl_variant.h:8589
variant_alternative< t_INDEX, variant< t_HEAD, t_TAIL... > >::type & emplace(const t_ARG_01 &arg_01, const t_ARG_02 &arg_02, const t_ARG_03 &arg_03, const t_ARG_04 &arg_04)
Definition bslstl_variant.h:8988
variant_alternative< t_INDEX, variant< t_HEAD, t_TAIL... > >::type & emplace()
Definition bslstl_variant.h:8941
variant(bsl::in_place_index_t< t_INDEX >, const t_ARG_01 &arg_01, const t_ARG_02 &arg_02, const t_ARG_03 &arg_03, const t_ARG_04 &arg_04, const t_ARG_05 &arg_05, const t_ARG_06 &arg_06, const t_ARG_07 &arg_07, const t_ARG_08 &arg_08, const t_ARG_09 &arg_09, const t_ARG_10 &arg_10)
Definition bslstl_variant.h:7974
variant(bsl::allocator_arg_t, allocator_type allocator, bsl::in_place_index_t< t_INDEX >, const t_ARG_01 &arg_01, const t_ARG_02 &arg_02, const t_ARG_03 &arg_03, const t_ARG_04 &arg_04, const t_ARG_05 &arg_05, const t_ARG_06 &arg_06, const t_ARG_07 &arg_07, const t_ARG_08 &arg_08, const t_ARG_09 &arg_09, const t_ARG_10 &arg_10)
Definition bslstl_variant.h:8629
bsl::enable_if< BloombergLP::bslstl::Variant_HasUniqueType< t_TYPE, variant >::value, t_TYPE & >::type emplace(const t_ARG_01 &arg_01, const t_ARG_02 &arg_02, const t_ARG_03 &arg_03)
Definition bslstl_variant.h:8710
bsl::enable_if< BloombergLP::bslstl::Variant_HasUniqueType< t_TYPE, variant >::value, t_TYPE & >::type emplace(const t_ARG_01 &arg_01, const t_ARG_02 &arg_02, const t_ARG_03 &arg_03, const t_ARG_04 &arg_04, const t_ARG_05 &arg_05, const t_ARG_06 &arg_06)
Definition bslstl_variant.h:8780
variant(const variant &original)
Definition bslstl_variant.h:7452
size_t index() const BSLS_KEYWORD_NOEXCEPT
Definition bslstl_variant.h:9257
variant & operator=(BloombergLP::bslmf::MovableRef< variant > rhs)
Definition bslstl_variant.h:9175
variant(bsl::in_place_index_t< t_INDEX >, const t_ARG_01 &arg_01, const t_ARG_02 &arg_02, const t_ARG_03 &arg_03)
Definition bslstl_variant.h:7788
variant(bsl::in_place_type_t< t_TYPE >, const t_ARG_01 &arg_01, const t_ARG_02 &arg_02, const t_ARG_03 &arg_03, const t_ARG_04 &arg_04, const t_ARG_05 &arg_05, BSLSTL_VARIANT_DECLARE_IF_HAS_UNIQUE_TYPE(t_TYPE))
variant_alternative< t_INDEX, variant< t_HEAD, t_TAIL... > >::type & emplace(const t_ARG_01 &arg_01, const t_ARG_02 &arg_02, const t_ARG_03 &arg_03, const t_ARG_04 &arg_04, const t_ARG_05 &arg_05, const t_ARG_06 &arg_06)
Definition bslstl_variant.h:9028
variant(bsl::allocator_arg_t, allocator_type allocator, bsl::in_place_index_t< t_INDEX >, const t_ARG_01 &arg_01, const t_ARG_02 &arg_02)
Definition bslstl_variant.h:8396
void swap(variant &other)
Definition bslstl_variant.h:9211
variant(bsl::allocator_arg_t, allocator_type allocator, bsl::in_place_type_t< t_TYPE >, const t_ARG_01 &arg_01, const t_ARG_02 &arg_02, const t_ARG_03 &arg_03, const t_ARG_04 &arg_04, const t_ARG_05 &arg_05, const t_ARG_06 &arg_06, const t_ARG_07 &arg_07, const t_ARG_08 &arg_08, const t_ARG_09 &arg_09, const t_ARG_10 &arg_10, BSLSTL_VARIANT_DECLARE_IF_HAS_UNIQUE_TYPE(t_TYPE))
bsl::enable_if< BloombergLP::bslstl::Variant_HasUniqueType< t_TYPE, variant >::value, t_TYPE & >::type emplace(const t_ARG_01 &arg_01, const t_ARG_02 &arg_02)
Definition bslstl_variant.h:8694
variant(bsl::allocator_arg_t, allocator_type allocator, const variant &original)
Definition bslstl_variant.h:8009
variant_alternative< t_INDEX, variant< t_HEAD, t_TAIL... > >::type & emplace(const t_ARG_01 &arg_01, const t_ARG_02 &arg_02, const t_ARG_03 &arg_03, const t_ARG_04 &arg_04, const t_ARG_05 &arg_05)
Definition bslstl_variant.h:9007
bsl::enable_if< BloombergLP::bslstl::Variant_HasUniqueType< t_TYPE, variant >::value, t_TYPE & >::type emplace(const t_ARG_01 &arg_01, const t_ARG_02 &arg_02, const t_ARG_03 &arg_03, const t_ARG_04 &arg_04)
Definition bslstl_variant.h:8731
variant(bsl::allocator_arg_t, allocator_type allocator, bsl::in_place_type_t< t_TYPE >, const t_ARG_01 &arg_01, const t_ARG_02 &arg_02, const t_ARG_03 &arg_03, const t_ARG_04 &arg_04, const t_ARG_05 &arg_05, const t_ARG_06 &arg_06, const t_ARG_07 &arg_07, const t_ARG_08 &arg_08, BSLSTL_VARIANT_DECLARE_IF_HAS_UNIQUE_TYPE(t_TYPE))
bsl::enable_if< BloombergLP::bslstl::Variant_HasUniqueType< t_TYPE, variant >::value, t_TYPE & >::type emplace(const t_ARG_01 &arg_01, const t_ARG_02 &arg_02, const t_ARG_03 &arg_03, const t_ARG_04 &arg_04, const t_ARG_05 &arg_05)
Definition bslstl_variant.h:8754
variant_alternative< t_INDEX, variant< t_HEAD, t_TAIL... > >::type & emplace(const t_ARG_01 &arg_01, const t_ARG_02 &arg_02, const t_ARG_03 &arg_03)
Definition bslstl_variant.h:8972
variant(bsl::allocator_arg_t, allocator_type allocator, bsl::in_place_index_t< t_INDEX >, const t_ARG_01 &arg_01, const t_ARG_02 &arg_02, const t_ARG_03 &arg_03, const t_ARG_04 &arg_04, const t_ARG_05 &arg_05, const t_ARG_06 &arg_06)
Definition bslstl_variant.h:8487
variant_alternative< t_INDEX, variant< t_HEAD, t_TAIL... > >::type & emplace(const t_ARG_01 &arg_01, const t_ARG_02 &arg_02, const t_ARG_03 &arg_03, const t_ARG_04 &arg_04, const t_ARG_05 &arg_05, const t_ARG_06 &arg_06, const t_ARG_07 &arg_07)
Definition bslstl_variant.h:9051
variant(bsl::allocator_arg_t, allocator_type allocator, bsl::in_place_type_t< t_TYPE >, const t_ARG_01 &arg_01, const t_ARG_02 &arg_02, BSLSTL_VARIANT_DECLARE_IF_HAS_UNIQUE_TYPE(t_TYPE))
BSLMF_NESTED_TRAIT_DECLARATION_IF(variant, BloombergLP::bslma::UsesBslmaAllocator,(BloombergLP::bslstl::Variant_UsesBslmaAllocatorAny< t_HEAD, t_TAIL... >::value))
bool valueless_by_exception() const BSLS_KEYWORD_NOEXCEPT
Definition bslstl_variant.h:9264
variant(bsl::allocator_arg_t, allocator_type allocator, bsl::in_place_type_t< t_TYPE >, BSLSTL_VARIANT_DECLARE_IF_HAS_UNIQUE_TYPE(t_TYPE))
variant(BloombergLP::bslmf::MovableRef< variant > original)
Definition bslstl_variant.h:7459
bsl::enable_if< BloombergLP::bslstl::Variant_HasUniqueType< t_TYPE, variant >::value, t_TYPE & >::type emplace(const t_ARG_01 &arg_01)
Definition bslstl_variant.h:8679
variant(bsl::in_place_index_t< t_INDEX >)
Definition bslstl_variant.h:7761
variant(bsl::allocator_arg_t, allocator_type allocator, bsl::in_place_type_t< t_TYPE >, const t_ARG_01 &arg_01, const t_ARG_02 &arg_02, const t_ARG_03 &arg_03, const t_ARG_04 &arg_04, const t_ARG_05 &arg_05, BSLSTL_VARIANT_DECLARE_IF_HAS_UNIQUE_TYPE(t_TYPE))
variant(bsl::allocator_arg_t, allocator_type allocator)
Definition bslstl_variant.h:8001
BSLMF_NESTED_TRAIT_DECLARATION_IF(variant, BloombergLP::bslmf::UsesAllocatorArgT,(BloombergLP::bslstl::Variant_UsesBslmaAllocatorAny< t_HEAD, t_TAIL... >::value))
variant(bsl::allocator_arg_t, allocator_type allocator, bsl::in_place_type_t< t_TYPE >, const t_ARG_01 &arg_01, const t_ARG_02 &arg_02, const t_ARG_03 &arg_03, const t_ARG_04 &arg_04, BSLSTL_VARIANT_DECLARE_IF_HAS_UNIQUE_TYPE(t_TYPE))
bsl::enable_if< BloombergLP::bslstl::Variant_HasUniqueType< t_TYPE, variant >::value, t_TYPE & >::type emplace(const t_ARG_01 &arg_01, const t_ARG_02 &arg_02, const t_ARG_03 &arg_03, const t_ARG_04 &arg_04, const t_ARG_05 &arg_05, const t_ARG_06 &arg_06, const t_ARG_07 &arg_07, const t_ARG_08 &arg_08)
Definition bslstl_variant.h:8838
variant(bsl::in_place_type_t< t_TYPE >, const t_ARG_01 &arg_01, const t_ARG_02 &arg_02, const t_ARG_03 &arg_03, const t_ARG_04 &arg_04, const t_ARG_05 &arg_05, const t_ARG_06 &arg_06, const t_ARG_07 &arg_07, BSLSTL_VARIANT_DECLARE_IF_HAS_UNIQUE_TYPE(t_TYPE))
variant_alternative< t_INDEX, variant< t_HEAD, t_TAIL... > >::type & emplace(const t_ARG_01 &arg_01, const t_ARG_02 &arg_02, const t_ARG_03 &arg_03, const t_ARG_04 &arg_04, const t_ARG_05 &arg_05, const t_ARG_06 &arg_06, const t_ARG_07 &arg_07, const t_ARG_08 &arg_08, const t_ARG_09 &arg_09)
Definition bslstl_variant.h:9103
BSLMF_NESTED_TRAIT_DECLARATION_IF(variant, BloombergLP::bslmf::IsBitwiseMoveable,(BloombergLP::bslstl::Variant_IsBitwiseMoveableAll< t_HEAD, t_TAIL... >::value))
variant(bsl::in_place_type_t< t_TYPE >, const t_ARG_01 &arg_01, const t_ARG_02 &arg_02, const t_ARG_03 &arg_03, const t_ARG_04 &arg_04, const t_ARG_05 &arg_05, const t_ARG_06 &arg_06, const t_ARG_07 &arg_07, const t_ARG_08 &arg_08, const t_ARG_09 &arg_09, const t_ARG_10 &arg_10, BSLSTL_VARIANT_DECLARE_IF_HAS_UNIQUE_TYPE(t_TYPE))
bsl::enable_if< BloombergLP::bslstl::Variant_HasUniqueType< t_TYPE, variant >::value, t_TYPE & >::type emplace(const t_ARG_01 &arg_01, const t_ARG_02 &arg_02, const t_ARG_03 &arg_03, const t_ARG_04 &arg_04, const t_ARG_05 &arg_05, const t_ARG_06 &arg_06, const t_ARG_07 &arg_07, const t_ARG_08 &arg_08, const t_ARG_09 &arg_09, const t_ARG_10 &arg_10)
Definition bslstl_variant.h:8911
variant(bsl::allocator_arg_t, allocator_type allocator, bsl::in_place_index_t< t_INDEX >, const t_ARG_01 &arg_01, const t_ARG_02 &arg_02, const t_ARG_03 &arg_03, const t_ARG_04 &arg_04, const t_ARG_05 &arg_05, const t_ARG_06 &arg_06, const t_ARG_07 &arg_07, const t_ARG_08 &arg_08)
Definition bslstl_variant.h:8552
variant(bsl::in_place_index_t< t_INDEX >, const t_ARG_01 &arg_01, const t_ARG_02 &arg_02, const t_ARG_03 &arg_03, const t_ARG_04 &arg_04, const t_ARG_05 &arg_05)
Definition bslstl_variant.h:7824
variant(bsl::in_place_type_t< t_TYPE >, const t_ARG_01 &arg_01, const t_ARG_02 &arg_02, BSLSTL_VARIANT_DECLARE_IF_HAS_UNIQUE_TYPE(t_TYPE))
variant(bsl::allocator_arg_t, allocator_type allocator, bsl::in_place_index_t< t_INDEX >, const t_ARG_01 &arg_01, const t_ARG_02 &arg_02, const t_ARG_03 &arg_03, const t_ARG_04 &arg_04)
Definition bslstl_variant.h:8434
variant(bsl::allocator_arg_t, allocator_type allocator, const t_TYPE &value, BSLSTL_VARIANT_DECLARE_IF_CONSTRUCTS_FROM(variant, t_TYPE))
bsl::enable_if< BloombergLP::bslstl::Variant_AssignsFromType< variant, t_TYPE >::value, variant & >::type operator=(const t_TYPE &value)
Definition bslstl_variant.h:9190
variant(bsl::allocator_arg_t, allocator_type allocator, bsl::in_place_index_t< t_INDEX >)
Definition bslstl_variant.h:8370
variant(const t_TYPE &value, BSLSTL_VARIANT_DECLARE_IF_CONSTRUCTS_FROM(variant, t_TYPE))
variant(bsl::allocator_arg_t, allocator_type allocator, bsl::in_place_type_t< t_TYPE >, const t_ARG_01 &arg_01, const t_ARG_02 &arg_02, const t_ARG_03 &arg_03, BSLSTL_VARIANT_DECLARE_IF_HAS_UNIQUE_TYPE(t_TYPE))
Variant_Base::allocator_type allocator_type
Type alias to the allocator type used by variant.
Definition bslstl_variant.h:3846
variant(bsl::allocator_arg_t, allocator_type allocator, bsl::in_place_index_t< t_INDEX >, const t_ARG_01 &arg_01)
Definition bslstl_variant.h:8382
variant(bsl::allocator_arg_t, allocator_type allocator, BloombergLP::bslmf::MovableRef< variant > original)
Definition bslstl_variant.h:8018
variant(bsl::in_place_type_t< t_TYPE >, const t_ARG_01 &arg_01, const t_ARG_02 &arg_02, const t_ARG_03 &arg_03, BSLSTL_VARIANT_DECLARE_IF_HAS_UNIQUE_TYPE(t_TYPE))
variant(bsl::allocator_arg_t, allocator_type allocator, bsl::in_place_type_t< t_TYPE >, const t_ARG_01 &arg_01, const t_ARG_02 &arg_02, const t_ARG_03 &arg_03, const t_ARG_04 &arg_04, const t_ARG_05 &arg_05, const t_ARG_06 &arg_06, const t_ARG_07 &arg_07, BSLSTL_VARIANT_DECLARE_IF_HAS_UNIQUE_TYPE(t_TYPE))
variant()
Definition bslstl_variant.h:7445
variant(bsl::in_place_index_t< t_INDEX >, const t_ARG_01 &arg_01, const t_ARG_02 &arg_02, const t_ARG_03 &arg_03, const t_ARG_04 &arg_04, const t_ARG_05 &arg_05, const t_ARG_06 &arg_06, const t_ARG_07 &arg_07, const t_ARG_08 &arg_08, const t_ARG_09 &arg_09)
Definition bslstl_variant.h:7938
variant(bsl::in_place_type_t< t_TYPE >, const t_ARG_01 &arg_01, const t_ARG_02 &arg_02, const t_ARG_03 &arg_03, const t_ARG_04 &arg_04, const t_ARG_05 &arg_05, const t_ARG_06 &arg_06, const t_ARG_07 &arg_07, const t_ARG_08 &arg_08, BSLSTL_VARIANT_DECLARE_IF_HAS_UNIQUE_TYPE(t_TYPE))
variant(bsl::allocator_arg_t, allocator_type allocator, bsl::in_place_index_t< t_INDEX >, const t_ARG_01 &arg_01, const t_ARG_02 &arg_02, const t_ARG_03 &arg_03, const t_ARG_04 &arg_04, const t_ARG_05 &arg_05)
Definition bslstl_variant.h:8459
variant_alternative< t_INDEX, variant< t_HEAD, t_TAIL... > >::type & emplace(const t_ARG_01 &arg_01)
Definition bslstl_variant.h:8951
variant(bsl::in_place_type_t< t_TYPE >, const t_ARG_01 &arg_01, const t_ARG_02 &arg_02, const t_ARG_03 &arg_03, const t_ARG_04 &arg_04, BSLSTL_VARIANT_DECLARE_IF_HAS_UNIQUE_TYPE(t_TYPE))
variant(bsl::allocator_arg_t, allocator_type allocator, bsl::in_place_index_t< t_INDEX >, const t_ARG_01 &arg_01, const t_ARG_02 &arg_02, const t_ARG_03 &arg_03)
Definition bslstl_variant.h:8412
variant(bsl::allocator_arg_t, allocator_type allocator, bsl::in_place_index_t< t_INDEX >, const t_ARG_01 &arg_01, const t_ARG_02 &arg_02, const t_ARG_03 &arg_03, const t_ARG_04 &arg_04, const t_ARG_05 &arg_05, const t_ARG_06 &arg_06, const t_ARG_07 &arg_07)
Definition bslstl_variant.h:8518
variant_alternative< t_INDEX, variant< t_HEAD, t_TAIL... > >::type & emplace(const t_ARG_01 &arg_01, const t_ARG_02 &arg_02, const t_ARG_03 &arg_03, const t_ARG_04 &arg_04, const t_ARG_05 &arg_05, const t_ARG_06 &arg_06, const t_ARG_07 &arg_07, const t_ARG_08 &arg_08, const t_ARG_09 &arg_09, const t_ARG_10 &arg_10)
Definition bslstl_variant.h:9139
variant & operator=(const variant &rhs)
Definition bslstl_variant.h:9166
variant(bsl::in_place_type_t< t_TYPE >, const t_ARG_01 &arg_01, const t_ARG_02 &arg_02, const t_ARG_03 &arg_03, const t_ARG_04 &arg_04, const t_ARG_05 &arg_05, const t_ARG_06 &arg_06, const t_ARG_07 &arg_07, const t_ARG_08 &arg_08, const t_ARG_09 &arg_09, BSLSTL_VARIANT_DECLARE_IF_HAS_UNIQUE_TYPE(t_TYPE))
variant(bsl::in_place_index_t< t_INDEX >, const t_ARG_01 &arg_01, const t_ARG_02 &arg_02, const t_ARG_03 &arg_03, const t_ARG_04 &arg_04, const t_ARG_05 &arg_05, const t_ARG_06 &arg_06, const t_ARG_07 &arg_07)
Definition bslstl_variant.h:7875
variant(bsl::in_place_index_t< t_INDEX >, const t_ARG_01 &arg_01, const t_ARG_02 &arg_02, const t_ARG_03 &arg_03, const t_ARG_04 &arg_04, const t_ARG_05 &arg_05, const t_ARG_06 &arg_06)
Definition bslstl_variant.h:7848
variant(bsl::in_place_index_t< t_INDEX >, const t_ARG_01 &arg_01, const t_ARG_02 &arg_02, const t_ARG_03 &arg_03, const t_ARG_04 &arg_04)
Definition bslstl_variant.h:7803
bsl::enable_if< BloombergLP::bslstl::Variant_HasUniqueType< t_TYPE, variant >::value, t_TYPE & >::type emplace()
Definition bslstl_variant.h:8664
variant(bsl::allocator_arg_t, allocator_type allocator, bsl::in_place_type_t< t_TYPE >, const t_ARG_01 &arg_01, const t_ARG_02 &arg_02, const t_ARG_03 &arg_03, const t_ARG_04 &arg_04, const t_ARG_05 &arg_05, const t_ARG_06 &arg_06, BSLSTL_VARIANT_DECLARE_IF_HAS_UNIQUE_TYPE(t_TYPE))
variant_alternative< t_INDEX, variant< t_HEAD, t_TAIL... > >::type & emplace(const t_ARG_01 &arg_01, const t_ARG_02 &arg_02, const t_ARG_03 &arg_03, const t_ARG_04 &arg_04, const t_ARG_05 &arg_05, const t_ARG_06 &arg_06, const t_ARG_07 &arg_07, const t_ARG_08 &arg_08)
Definition bslstl_variant.h:9076
variant(bsl::in_place_type_t< t_TYPE >, const t_ARG_01 &arg_01, const t_ARG_02 &arg_02, const t_ARG_03 &arg_03, const t_ARG_04 &arg_04, const t_ARG_05 &arg_05, const t_ARG_06 &arg_06, BSLSTL_VARIANT_DECLARE_IF_HAS_UNIQUE_TYPE(t_TYPE))
bsl::enable_if< BloombergLP::bslstl::Variant_HasUniqueType< t_TYPE, variant >::value, t_TYPE & >::type emplace(const t_ARG_01 &arg_01, const t_ARG_02 &arg_02, const t_ARG_03 &arg_03, const t_ARG_04 &arg_04, const t_ARG_05 &arg_05, const t_ARG_06 &arg_06, const t_ARG_07 &arg_07)
Definition bslstl_variant.h:8808
variant(bsl::in_place_index_t< t_INDEX >, const t_ARG_01 &arg_01)
Definition bslstl_variant.h:7769
variant(bsl::allocator_arg_t, allocator_type allocator, bsl::in_place_type_t< t_TYPE >, const t_ARG_01 &arg_01, const t_ARG_02 &arg_02, const t_ARG_03 &arg_03, const t_ARG_04 &arg_04, const t_ARG_05 &arg_05, const t_ARG_06 &arg_06, const t_ARG_07 &arg_07, const t_ARG_08 &arg_08, const t_ARG_09 &arg_09, BSLSTL_VARIANT_DECLARE_IF_HAS_UNIQUE_TYPE(t_TYPE))
variant(bsl::in_place_type_t< t_TYPE >, BSLSTL_VARIANT_DECLARE_IF_HAS_UNIQUE_TYPE(t_TYPE))
variant_alternative< t_INDEX, variant< t_HEAD, t_TAIL... > >::type & emplace(const t_ARG_01 &arg_01, const t_ARG_02 &arg_02)
Definition bslstl_variant.h:8961
variant(bsl::in_place_index_t< t_INDEX >, const t_ARG_01 &arg_01, const t_ARG_02 &arg_02, const t_ARG_03 &arg_03, const t_ARG_04 &arg_04, const t_ARG_05 &arg_05, const t_ARG_06 &arg_06, const t_ARG_07 &arg_07, const t_ARG_08 &arg_08)
Definition bslstl_variant.h:7905
variant(bsl::in_place_index_t< t_INDEX >, const t_ARG_01 &arg_01, const t_ARG_02 &arg_02)
Definition bslstl_variant.h:7778
variant(bsl::allocator_arg_t, allocator_type allocator, bsl::in_place_type_t< t_TYPE >, const t_ARG_01 &arg_01, BSLSTL_VARIANT_DECLARE_IF_HAS_UNIQUE_TYPE(t_TYPE))
bsl::enable_if< BloombergLP::bslstl::Variant_HasUniqueType< t_TYPE, variant >::value, t_TYPE & >::type emplace(const t_ARG_01 &arg_01, const t_ARG_02 &arg_02, const t_ARG_03 &arg_03, const t_ARG_04 &arg_04, const t_ARG_05 &arg_05, const t_ARG_06 &arg_06, const t_ARG_07 &arg_07, const t_ARG_08 &arg_08, const t_ARG_09 &arg_09)
Definition bslstl_variant.h:8870
variant(bsl::in_place_type_t< t_TYPE >, const t_ARG_01 &arg_01, BSLSTL_VARIANT_DECLARE_IF_HAS_UNIQUE_TYPE(t_TYPE))
Definition bslmf_movableref.h:752
Definition bslstl_variant.h:2706
void operator()(bsl::in_place_index_t< t_INDEX >, const t_TYPE &value) const
Definition bslstl_variant.h:2735
Variant_CopyAssignVisitor(t_VARIANT *variant)
Definition bslstl_variant.h:2717
Definition bslstl_variant.h:2623
Variant_CopyConstructVisitor(t_VARIANT_BASE *variant)
Definition bslstl_variant.h:2634
void operator()(bsl::in_place_index_t< t_INDEX >, const t_TYPE &other) const
Definition bslstl_variant.h:2648
Definition bslstl_variant.h:2547
t_TYPE & value()
Definition bslstl_variant.h:5973
Variant_DataImp()=default
Create a Variant_DataImp object that holds an empty buffer.
const t_TYPE & value() const
Definition bslstl_variant.h:5999
Definition bslstl_variant.h:2982
void operator()(t_TYPE &value) const
Definition bslstl_variant.h:3003
Variant_HashVisitor(t_HASHALG &hashAlg)
Definition bslstl_variant.h:2993
Definition bslstl_variant.h:2763
void operator()(bsl::in_place_index_t< t_INDEX >, t_TYPE &value) const
Definition bslstl_variant.h:2794
Variant_MoveAssignVisitor(t_VARIANT *variant)
Definition bslstl_variant.h:2777
Definition bslstl_variant.h:2663
void operator()(bsl::in_place_index_t< t_INDEX >, t_TYPE &other) const
Definition bslstl_variant.h:2691
Variant_MoveConstructVisitor(t_VARIANT_BASE *variant)
Definition bslstl_variant.h:2677
Definition bslstl_variant.h:2926
Variant_SwapVisitor(t_VARIANT *variant)
Definition bslstl_variant.h:2938
void operator()(bsl::in_place_index_t< t_INDEX >, t_TYPE &value) const
Definition bslstl_variant.h:2954
#define BSLMF_ASSERT(expr)
Definition bslmf_assert.h:231
#define BSLS_ASSERT_SAFE(X)
Definition bsls_assert.h:1917
#define BSLS_THROW(X)
Definition bsls_exceptionutil.h:374
#define BSLS_IDENT(str)
BSLS_IDENT() - insert string into .comment binary segment (if supported)
Definition bsls_ident.h:238
#define BSLS_KEYWORD_CONSTEXPR_CPP14
Definition bsls_keyword.h:631
#define BSLS_KEYWORD_CONSTEXPR
Definition bsls_keyword.h:624
#define BSLS_KEYWORD_INLINE_CONSTEXPR
Definition bsls_keyword.h:659
#define BSLS_KEYWORD_NOEXCEPT
Definition bsls_keyword.h:674
#define BSLS_KEYWORD_INLINE_VARIABLE
Definition bsls_keyword.h:665
#define BSLS_UTIL_ADDRESSOF(OBJ)
Definition bsls_util.h:296
void BSLSTL_VARIANT_NOT_A_TYPE
Definition bslstl_variant.h:330
Definition bdlat_valuetypefunctions.h:939
bool holds_alternative(const variant< t_HEAD, t_TAIL... > &obj) BSLS_KEYWORD_NOEXCEPT
Definition bslstl_variant.h:9609
void hashAppend(HASH_ALGORITHM &hashAlgorithm, const array< TYPE, SIZE > &input)
Pass the specified input to the specified hashAlgorithm
Definition bslstl_array.h:959
Variant_GetIndexReturnType< t_INDEX, t_VARIANT >::pointer get_if(t_VARIANT *obj) BSLS_KEYWORD_NOEXCEPT
Definition bslstl_variant.h:9540
BSLS_KEYWORD_CONSTEXPR_CPP14 TYPE & get(array< TYPE, SIZE > &a) BSLS_KEYWORD_NOEXCEPT
BSLS_KEYWORD_INLINE_CONSTEXPR size_t variant_npos
Definition bslstl_variant.h:381
bsl::invoke_result< t_VISITOR &, typenamebsl::variant_alternative< 0, t_VARIANT >::type & >::type visit(t_VISITOR &visitor, t_VARIANT &variant)
Definition bslstl_variant.h:2359
ALLOCATOR const STRING_VIEW_LIKE_TYPE & rhs
Definition bslstl_string.h:3918
t_RET visitR(t_VISITOR &visitor, t_VARIANT &variant)
Definition bslstl_variant.h:2313
ALLOCATOR & lhs
Definition bslstl_string.h:3917
Definition bslstl_algorithm.h:84
void variant_swapImpl(bsl::true_type, t_VARIANT &lhs, t_VARIANT &rhs)
Definition bslstl_variant.h:6009
Definition bdldfp_decimal.h:5549
BloombergLP::bslmf::MovableRef< typename bsl::variant_alternative< t_INDEX, t_VARIANT >::type > type
Definition bslstl_variant.h:592
bsl::variant_alternative< t_INDEX, constt_VARIANT >::type * pointer
Definition bslstl_variant.h:581
bsl::variant_alternative< t_INDEX, constt_VARIANT >::type & type
Definition bslstl_variant.h:578
bsl::variant_alternative< t_INDEX, t_VARIANT >::type & type
Definition bslstl_variant.h:566
bsl::variant_alternative< t_INDEX, t_VARIANT >::type * pointer
Definition bslstl_variant.h:569
Definition bslstl_variant.h:561
Definition bslstl_variant.h:605
t_HEAD type
Definition bslstl_variant.h:433
Definition bslstl_variant.h:420
Definition bslmf_addpointer.h:175
BloombergLP::bslmf::AddPointer_Impl< t_TYPE >::type type
Definition bslmf_addpointer.h:181
Definition bslmf_allocatorargt.h:433
Definition bslmf_conditional.h:123
Definition bslmf_enableif.h:530
Definition bslstl_inplace.h:183
Definition bslstl_inplace.h:143
Definition bslmf_integralconstant.h:261
t_TYPE type
This typedef is an alias to the (template parameter) t_TYPE.
Definition bslmf_removeconst.h:164
Definition bslmf_removecv.h:120
remove_const< typenameremove_volatile< t_TYPE >::type >::type type
Definition bslmf_removecv.h:128
variant_alternative< t_INDEX, t_TYPE >::type const type
Definition bslstl_variant.h:396
variant_alternative< t_INDEX, t_TYPE >::type const volatile type
Definition bslstl_variant.h:407
BSLMF_ASSERT((t_INDEX< bsl::variant_size< variant< t_HEAD, t_TAIL... > >::value))
variant_alternative< t_INDEX, t_TYPE >::type volatile type
Definition bslstl_variant.h:401
Definition bslstl_variant.h:392
Definition bslstl_variant.h:349
BloombergLP::bslmf::MovableRefUtil MoveUtil
Definition bslstl_variant.h:3040
BloombergLP::bslma::Allocator * mechanism() const
Return the mechanism of the stored allocator.
Definition bslstl_variant.h:3069
bsl::allocator< char > allocator_type
Definition bslstl_variant.h:3041
Variant_AllocatorBase()
Definition bslstl_variant.h:3050
allocator_type d_allocator
Definition bslstl_variant.h:3044
Variant_AllocatorBase(allocator_type allocator)
Definition bslstl_variant.h:3061
Variant_AllocatorBase(const Variant_AllocatorBase &original)
Definition bslstl_variant.h:3054
Definition bslstl_variant.h:3016
BloombergLP::bslma::Allocator * mechanism() const
Definition bslstl_variant.h:3029
Definition bslstl_variant.h:3106
Definition bslstl_variant.h:3090
BSLMF_NESTED_TRAIT_DECLARATION_IF(Variant_Base, BloombergLP::bslma::UsesBslmaAllocator,(BloombergLP::bslstl::Variant_UsesBslmaAllocatorAny< t_HEAD, t_TAIL... >::value))
Variant_Base()
Definition bslstl_variant.h:6167
bsl::conditional< BloombergLP::bslstl::Variant_UsesBslmaAllocatorAny< t_HEAD, t_TAIL... >::value, bsl::allocator< char >, NoAlloc >::type allocator_type
Type alias to the allocator type used by variant.
Definition bslstl_variant.h:3114
size_t d_type
Definition bslstl_variant.h:3120
void baseEmplace()
Definition bslstl_variant.h:7007
bsl::variant< t_HEAD, t_TAIL... > Variant
Definition bslstl_variant.h:3100
BSLMF_NESTED_TRAIT_DECLARATION_IF(Variant_Base, BloombergLP::bslmf::IsBitwiseMoveable,(BloombergLP::bslstl::Variant_IsBitwiseMoveableAll< t_HEAD, t_TAIL... >::value))
Variant_Union d_union
Union holding the alternative object.
Definition bslstl_variant.h:3123
BSLMF_NESTED_TRAIT_DECLARATION_IF(Variant_Base, BloombergLP::bslmf::UsesAllocatorArgT,(BloombergLP::bslstl::Variant_UsesBslmaAllocatorAny< t_HEAD, t_TAIL... >::value))
~Variant_Base()
Destroy this object. The contained value, if any, is destroyed.
Definition bslstl_variant.h:6971
BloombergLP::bslmf::MovableRefUtil MoveUtil
Definition bslstl_variant.h:3093
void reset() BSLS_KEYWORD_NOEXCEPT
Destroy the contained value, if any.
Definition bslstl_variant.h:7392
BloombergLP::bslstl::Variant_Union< t_HEAD, t_TAIL... > Variant_Union
Definition bslstl_variant.h:3099
Variant_Base & operator=(const Variant_Base &rhs)
Definition bslstl_variant.h:7335
BloombergLP::bslstl::Variant_AllocatorBase< BloombergLP::bslstl::Variant_UsesBslmaAllocatorAny< t_HEAD, t_TAIL... >::value > AllocBase
Definition bslstl_variant.h:3097
Definition bslstl_variant.h:775
Definition bslstl_variant.h:2813
void operator()(t_TYPE &object) const
Definition bslstl_variant.h:2821
Definition bslstl_variant.h:2434
BSLS_KEYWORD_CONSTEXPR Variant_NoSuchType(int) BSLS_KEYWORD_NOEXCEPT
Create a Variant_NoSuchType object.
Definition bslstl_variant.h:5934
Definition bslstl_variant.h:795
Definition bslstl_variant.h:2117
Definition bsls_objectbuffer.h:277
TYPE * address()
Definition bsls_objectbuffer.h:335
TYPE & object()
Definition bsls_objectbuffer.h:352
Variant_Union< t_TAIL0, t_TAIL... > d_tail
Definition bslstl_variant.h:2609
Variant_DataImp< t_HEAD > d_head
Definition bslstl_variant.h:2608
Definition bslstl_variant.h:2589