Lines Matching full:variant

14    variant synopsis
18 // 20.7.2, class template variant
20 class variant {
24 constexpr variant() noexcept(see below);
25 constexpr variant(const variant&);
26 constexpr variant(variant&&) noexcept(see below);
28 template <class T> constexpr variant(T&&) noexcept(see below);
31 constexpr explicit variant(in_place_type_t<T>, Args&&...);
34 constexpr explicit variant(
38 constexpr explicit variant(in_place_index_t<I>, Args&&...);
41 constexpr explicit variant(
45 constexpr ~variant(); // constexpr since c++20
48 constexpr variant& operator=(const variant&);
49 constexpr variant& operator=(variant&&) noexcept(see below);
52 constexpr variant& operator=(T&&) noexcept(see below); // constexpr since c++20
62 constexpr variant_alternative_t<I, variant>& emplace(Args&&...); // constexpr since c++20
65 constexpr variant_alternative_t<I, variant>&
73 void swap(variant&) noexcept(see below);
75 // [variant.visit], visitation
82 // 20.7.3, variant helper classes
93 struct variant_size<variant<Types...>>;
105 struct variant_alternative<I, variant<Types...>>;
111 constexpr bool holds_alternative(const variant<Types...>&) noexcept;
114 constexpr variant_alternative_t<I, variant<Types...>>&
115 get(variant<Types...>&);
118 constexpr variant_alternative_t<I, variant<Types...>>&&
119 get(variant<Types...>&&);
122 constexpr variant_alternative_t<I, variant<Types...>> const&
123 get(const variant<Types...>&);
126 constexpr variant_alternative_t<I, variant<Types...>> const&&
127 get(const variant<Types...>&&);
130 constexpr T& get(variant<Types...>&);
133 constexpr T&& get(variant<Types...>&&);
136 constexpr const T& get(const variant<Types...>&);
139 constexpr const T&& get(const variant<Types...>&&);
142 constexpr add_pointer_t<variant_alternative_t<I, variant<Types...>>>
143 get_if(variant<Types...>*) noexcept;
146 constexpr add_pointer_t<const variant_alternative_t<I, variant<Types...>>>
147 get_if(const variant<Types...>*) noexcept;
151 get_if(variant<Types...>*) noexcept;
155 get_if(const variant<Types...>*) noexcept;
159 constexpr bool operator==(const variant<Types...>&, const variant<Types...>&);
162 constexpr bool operator!=(const variant<Types...>&, const variant<Types...>&);
165 constexpr bool operator<(const variant<Types...>&, const variant<Types...>&);
168 constexpr bool operator>(const variant<Types...>&, const variant<Types...>&);
171 constexpr bool operator<=(const variant<Types...>&, const variant<Types...>&);
174 constexpr bool operator>=(const variant<Types...>&, const variant<Types...>&);
178 operator<=>(const variant<Types...>&, const variant<Types...>&); // since C++20
201 void swap(variant<Types...>&, variant<Types...>&) noexcept(see below);
208 template <class... Types> struct hash<variant<Types...>>;
216 # include <__cxx03/variant>
227 # include <__fwd/variant.h>
276 // [variant.syn]
329 struct _LIBCPP_TEMPLATE_VIS variant_size<variant<_Types...>> : integral_constant<size_t, sizeof...(_Types)> {};
342 struct _LIBCPP_TEMPLATE_VIS variant_alternative<_Ip, variant<_Types...>> {
366 _LIBCPP_HIDE_FROM_ABI constexpr variant<_Types...>& __as_variant(variant<_Types...>& __vs) noexcept {
371 _LIBCPP_HIDE_FROM_ABI constexpr const variant<_Types...>& __as_variant(const variant<_Types...>& __vs) noexcept {
376 _LIBCPP_HIDE_FROM_ABI constexpr variant<_Types...>&& __as_variant(variant<_Types...>&& __vs) noexcept {
381 _LIBCPP_HIDE_FROM_ABI constexpr const variant<_Types...>&& __as_variant(const variant<_Types...>&& __vs) noexcept {
1159 class _LIBCPP_TEMPLATE_VIS _LIBCPP_DECLSPEC_EMPTY_BASES _LIBCPP_NO_SPECIALIZATIONS variant
1165 static_assert(0 < sizeof...(_Types), "variant must consist of at least one alternative.");
1167 static_assert(__all<!is_array_v<_Types>...>::value, "variant can not have an array type as an alternative.");
1169 static_assert(__all<!is_reference_v<_Types>...>::value, "variant can not have a reference type as an alternative.");
1171 static_assert(__all<!is_void_v<_Types>...>::value, "variant can not have a void type as an alternative.");
1173 using __first_type _LIBCPP_NODEBUG = variant_alternative_t<0, variant>;
1177 conditional_t<_And<__libcpp_is_trivially_relocatable<_Types>...>::value, variant, void>;
1181 _LIBCPP_HIDE_FROM_ABI constexpr variant() noexcept(is_nothrow_default_constructible_v<__first_type>)
1184 _LIBCPP_HIDE_FROM_ABI constexpr variant(const variant&) = default;
1185 _LIBCPP_HIDE_FROM_ABI constexpr variant(variant&&) = default;
1188 enable_if_t<!is_same_v<__remove_cvref_t<_Arg>, variant>, int> = 0,
1194 _LIBCPP_HIDE_FROM_ABI constexpr variant(_Arg&& __arg) noexcept(is_nothrow_constructible_v<_Tp, _Arg>)
1200 class _Tp = variant_alternative_t<_Ip, variant<_Types...>>,
1202 _LIBCPP_HIDE_FROM_ABI explicit constexpr variant(in_place_index_t<_Ip>, _Args&&... __args) noexcept(
1210 class _Tp = variant_alternative_t<_Ip, variant<_Types...>>,
1212 _LIBCPP_HIDE_FROM_ABI explicit constexpr variant(
1222 _LIBCPP_HIDE_FROM_ABI explicit constexpr variant(in_place_type_t<_Tp>, _Args&&... __args) noexcept(
1231 _LIBCPP_HIDE_FROM_ABI explicit constexpr variant(
1237 _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20 ~variant() = default;
1239 _LIBCPP_HIDE_FROM_ABI constexpr variant& operator=(const variant&) = default;
1240 _LIBCPP_HIDE_FROM_ABI constexpr variant& operator=(variant&&) = default;
1243 enable_if_t<!is_same_v<__remove_cvref_t<_Arg>, variant>, int> = 0,
1247 _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20 variant&
1256 class _Tp = variant_alternative_t<_Ip, variant<_Types...>>,
1266 class _Tp = variant_alternative_t<_Ip, variant<_Types...>>,
1299 _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20 void swap(variant& __that) noexcept(
1305 // Helper class to implement [variant.visit]/10
1314 return std::visit(std::forward<_Visitor>(__visitor), std::__forward_as<_Self, variant>(__self));
1319 return std::visit<_Rp>(std::forward<_Visitor>(__visitor), std::__forward_as<_Self, variant>(__self));
1331 _LIBCPP_HIDE_FROM_ABI constexpr bool __holds_alternative(const variant<_Types...>& __v) noexcept {
1336 _LIBCPP_HIDE_FROM_ABI constexpr bool holds_alternative(const variant<_Types...>& __v) noexcept {
1351 _LIBCPP_AVAILABILITY_THROW_BAD_VARIANT_ACCESS constexpr variant_alternative_t<_Ip, variant<_Types...>>&
1352 get(variant<_Types...>& __v) {
1354 static_assert(!is_void_v<variant_alternative_t<_Ip, variant<_Types...>>>);
1360 _LIBCPP_AVAILABILITY_THROW_BAD_VARIANT_ACCESS constexpr variant_alternative_t<_Ip, variant<_Types...>>&&
1361 get(variant<_Types...>&& __v) {
1363 static_assert(!is_void_v<variant_alternative_t<_Ip, variant<_Types...>>>);
1369 _LIBCPP_AVAILABILITY_THROW_BAD_VARIANT_ACCESS constexpr const variant_alternative_t<_Ip, variant<_Types...>>&
1370 get(const variant<_Types...>& __v) {
1372 static_assert(!is_void_v<variant_alternative_t<_Ip, variant<_Types...>>>);
1378 _LIBCPP_AVAILABILITY_THROW_BAD_VARIANT_ACCESS constexpr const variant_alternative_t<_Ip, variant<_Types...>>&&
1379 get(const variant<_Types...>&& __v) {
1381 static_assert(!is_void_v<variant_alternative_t<_Ip, variant<_Types...>>>);
1386 _LIBCPP_HIDE_FROM_ABI _LIBCPP_AVAILABILITY_THROW_BAD_VARIANT_ACCESS constexpr _Tp& get(variant<_Types...>& __v) {
1392 _LIBCPP_HIDE_FROM_ABI _LIBCPP_AVAILABILITY_THROW_BAD_VARIANT_ACCESS constexpr _Tp&& get(variant<_Types...>&& __v) {
1399 get(const variant<_Types...>& __v) {
1406 get(const variant<_Types...>&& __v) {
1418 _LIBCPP_HIDE_FROM_ABI constexpr add_pointer_t<variant_alternative_t<_Ip, variant<_Types...>>>
1419 get_if(variant<_Types...>* __v) noexcept {
1421 static_assert(!is_void_v<variant_alternative_t<_Ip, variant<_Types...>>>);
1426 _LIBCPP_HIDE_FROM_ABI constexpr add_pointer_t<const variant_alternative_t<_Ip, variant<_Types...>>>
1427 get_if(const variant<_Types...>* __v) noexcept {
1429 static_assert(!is_void_v<variant_alternative_t<_Ip, variant<_Types...>>>);
1434 _LIBCPP_HIDE_FROM_ABI constexpr add_pointer_t<_Tp> get_if(variant<_Types...>* __v) noexcept {
1440 _LIBCPP_HIDE_FROM_ABI constexpr add_pointer_t<const _Tp> get_if(const variant<_Types...>* __v) noexcept {
1456 _LIBCPP_HIDE_FROM_ABI constexpr bool operator==(const variant<_Types...>& __lhs, const variant<_Types...>& __rhs) {
1470 operator<=>(const variant<_Types...>& __lhs, const variant<_Types...>& __rhs) {
1488 _LIBCPP_HIDE_FROM_ABI constexpr bool operator!=(const variant<_Types...>& __lhs, const variant<_Types...>& __rhs) {
1498 _LIBCPP_HIDE_FROM_ABI constexpr bool operator<(const variant<_Types...>& __lhs, const variant<_Types...>& __rhs) {
1512 _LIBCPP_HIDE_FROM_ABI constexpr bool operator>(const variant<_Types...>& __lhs, const variant<_Types...>& __rhs) {
1526 _LIBCPP_HIDE_FROM_ABI constexpr bool operator<=(const variant<_Types...>& __lhs, const variant<_Types...>& __rhs) {
1540 _LIBCPP_HIDE_FROM_ABI constexpr bool operator>=(const variant<_Types...>& __lhs, const variant<_Types...>& __rhs) {
1581 swap(variant<_Types...>& __lhs,
1582 variant<_Types...>& __rhs) noexcept(noexcept(__lhs.swap(__rhs))) -> decltype(__lhs.swap(__rhs)) {
1587 struct _LIBCPP_TEMPLATE_VIS hash< __enable_hash_helper<variant<_Types...>, remove_const_t<_Types>...>> {
1588 using argument_type = variant<_Types...>;
1617 _LIBCPP_HIDE_FROM_ABI constexpr auto&& __unchecked_get(const variant<_Types...>& __v) noexcept {
1622 _LIBCPP_HIDE_FROM_ABI constexpr auto&& __unchecked_get(variant<_Types...>& __v) noexcept {