Lines Matching refs: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 ~variant();
48 constexpr variant& operator=(const variant&);
49 constexpr variant& operator=(variant&&) noexcept(see below);
51 template <class T> variant& operator=(T&&) noexcept(see below);
61 variant_alternative_t<I, variant>& emplace(Args&&...);
64 variant_alternative_t<I, variant>& emplace(initializer_list<U>, Args&&...);
71 void swap(variant&) noexcept(see below);
74 // 20.7.3, variant helper classes
85 struct variant_size<variant<Types...>>;
97 struct variant_alternative<I, variant<Types...>>;
103 constexpr bool holds_alternative(const variant<Types...>&) noexcept;
106 constexpr variant_alternative_t<I, variant<Types...>>&
107 get(variant<Types...>&);
110 constexpr variant_alternative_t<I, variant<Types...>>&&
111 get(variant<Types...>&&);
114 constexpr variant_alternative_t<I, variant<Types...>> const&
115 get(const variant<Types...>&);
118 constexpr variant_alternative_t<I, variant<Types...>> const&&
119 get(const variant<Types...>&&);
122 constexpr T& get(variant<Types...>&);
125 constexpr T&& get(variant<Types...>&&);
128 constexpr const T& get(const variant<Types...>&);
131 constexpr const T&& get(const variant<Types...>&&);
134 constexpr add_pointer_t<variant_alternative_t<I, variant<Types...>>>
135 get_if(variant<Types...>*) noexcept;
138 constexpr add_pointer_t<const variant_alternative_t<I, variant<Types...>>>
139 get_if(const variant<Types...>*) noexcept;
143 get_if(variant<Types...>*) noexcept;
147 get_if(const variant<Types...>*) noexcept;
151 constexpr bool operator==(const variant<Types...>&, const variant<Types...>&);
154 constexpr bool operator!=(const variant<Types...>&, const variant<Types...>&);
157 constexpr bool operator<(const variant<Types...>&, const variant<Types...>&);
160 constexpr bool operator>(const variant<Types...>&, const variant<Types...>&);
163 constexpr bool operator<=(const variant<Types...>&, const variant<Types...>&);
166 constexpr bool operator>=(const variant<Types...>&, const variant<Types...>&);
170 operator<=>(const variant<Types...>&, const variant<Types...>&); // since C++20
193 void swap(variant<Types...>&, variant<Types...>&) noexcept(see below);
200 template <class... Types> struct hash<variant<Types...>>;
248 // [variant.syn]
296 class _LIBCPP_TEMPLATE_VIS variant;
315 struct _LIBCPP_TEMPLATE_VIS variant_size<variant<_Types...>>
337 struct _LIBCPP_TEMPLATE_VIS variant_alternative<_Ip, variant<_Types...>> {
367 class _LIBCPP_TEMPLATE_VIS variant;
370 _LIBCPP_INLINE_VISIBILITY constexpr variant<_Types...>&
371 __as_variant(variant<_Types...>& __vs) noexcept {
376 _LIBCPP_INLINE_VISIBILITY constexpr const variant<_Types...>&
377 __as_variant(const variant<_Types...>& __vs) noexcept {
382 _LIBCPP_INLINE_VISIBILITY constexpr variant<_Types...>&&
383 __as_variant(variant<_Types...>&& __vs) noexcept {
388 _LIBCPP_INLINE_VISIBILITY constexpr const variant<_Types...>&&
389 __as_variant(const variant<_Types...>&& __vs) noexcept {
1294 class _LIBCPP_TEMPLATE_VIS variant
1304 "variant must consist of at least one alternative.");
1307 "variant can not have an array type as an alternative.");
1310 "variant can not have a reference type as an alternative.");
1313 "variant can not have a void type as an alternative.");
1315 using __first_type = variant_alternative_t<0, variant>;
1323 constexpr variant() noexcept(is_nothrow_default_constructible_v<__first_type>)
1326 constexpr variant(const variant&) = default;
1327 constexpr variant(variant&&) = default;
1331 enable_if_t<!is_same_v<__remove_cvref_t<_Arg>, variant>, int> = 0,
1339 constexpr variant(_Arg&& __arg) noexcept(
1345 class _Tp = variant_alternative_t<_Ip, variant<_Types...>>,
1348 explicit constexpr variant(
1358 class _Tp = variant_alternative_t<_Ip, variant<_Types...>>,
1362 explicit constexpr variant(
1376 explicit constexpr variant(in_place_type_t<_Tp>, _Args&&... __args) noexcept(
1389 explicit constexpr variant(
1396 ~variant() = default;
1398 constexpr variant& operator=(const variant&) = default;
1399 constexpr variant& operator=(variant&&) = default;
1403 enable_if_t<!is_same_v<__remove_cvref_t<_Arg>, variant>, int> = 0,
1410 variant& operator=(_Arg&& __arg) noexcept(
1421 class _Tp = variant_alternative_t<_Ip, variant<_Types...>>,
1433 class _Tp = variant_alternative_t<_Ip, variant<_Types...>>,
1481 void swap(variant& __that) noexcept(
1496 constexpr bool __holds_alternative(const variant<_Types...>& __v) noexcept {
1502 constexpr bool holds_alternative(const variant<_Types...>& __v) noexcept {
1520 constexpr variant_alternative_t<_Ip, variant<_Types...>>& get(
1521 variant<_Types...>& __v) {
1523 static_assert(!is_void_v<variant_alternative_t<_Ip, variant<_Types...>>>);
1530 constexpr variant_alternative_t<_Ip, variant<_Types...>>&& get(
1531 variant<_Types...>&& __v) {
1533 static_assert(!is_void_v<variant_alternative_t<_Ip, variant<_Types...>>>);
1540 constexpr const variant_alternative_t<_Ip, variant<_Types...>>& get(
1541 const variant<_Types...>& __v) {
1543 static_assert(!is_void_v<variant_alternative_t<_Ip, variant<_Types...>>>);
1550 constexpr const variant_alternative_t<_Ip, variant<_Types...>>&& get(
1551 const variant<_Types...>&& __v) {
1553 static_assert(!is_void_v<variant_alternative_t<_Ip, variant<_Types...>>>);
1560 constexpr _Tp& get(variant<_Types...>& __v) {
1568 constexpr _Tp&& get(variant<_Types...>&& __v) {
1577 constexpr const _Tp& get(const variant<_Types...>& __v) {
1585 constexpr const _Tp&& get(const variant<_Types...>&& __v) {
1602 constexpr add_pointer_t<variant_alternative_t<_Ip, variant<_Types...>>>
1603 get_if(variant<_Types...>* __v) noexcept {
1605 static_assert(!is_void_v<variant_alternative_t<_Ip, variant<_Types...>>>);
1611 constexpr add_pointer_t<const variant_alternative_t<_Ip, variant<_Types...>>>
1612 get_if(const variant<_Types...>* __v) noexcept {
1614 static_assert(!is_void_v<variant_alternative_t<_Ip, variant<_Types...>>>);
1621 get_if(variant<_Types...>* __v) noexcept {
1629 get_if(const variant<_Types...>* __v) noexcept {
1647 constexpr bool operator==(const variant<_Types...>& __lhs,
1648 const variant<_Types...>& __rhs) {
1659 operator<=>(const variant<_Types...>& __lhs, const variant<_Types...>& __rhs) {
1678 constexpr bool operator!=(const variant<_Types...>& __lhs,
1679 const variant<_Types...>& __rhs) {
1689 constexpr bool operator<(const variant<_Types...>& __lhs,
1690 const variant<_Types...>& __rhs) {
1701 constexpr bool operator>(const variant<_Types...>& __lhs,
1702 const variant<_Types...>& __rhs) {
1713 constexpr bool operator<=(const variant<_Types...>& __lhs,
1714 const variant<_Types...>& __rhs) {
1726 constexpr bool operator>=(const variant<_Types...>& __lhs,
1727 const variant<_Types...>& __rhs) {
1776 auto swap(variant<_Types...>& __lhs, variant<_Types...>& __rhs)
1783 __enable_hash_helper<variant<_Types...>, remove_const_t<_Types>...>> {
1784 using argument_type = variant<_Types...>;
1817 constexpr auto&& __unchecked_get(const variant<_Types...>& __v) noexcept {
1823 constexpr auto&& __unchecked_get(variant<_Types...>& __v) noexcept {