This class is a replacement for C++17 std::variant. More...
#include <cvb/shims/variant.hpp>
Public Member Functions | |
| variant () noexcept | |
| Default ctor creating a variant with default value of the first alternative type. | |
| ~variant () noexcept | |
| Destructor. | |
| variant (const variant &rhs) | |
| Copy ctor. More... | |
| variant (variant &&rhs) | |
| Move ctor. More... | |
| variant & | operator= (const variant &rhs) |
| Copy operator. More... | |
| variant & | operator= (variant &&rhs) |
| Move operator. More... | |
| template<class T , typename std::enable_if<!std::is_same< T, variant & >::value, int >::type = 0> | |
| variant (T &&value) | |
Ctor from an object of supported type T. More... | |
| template<class T , typename std::enable_if<!std::is_same< T, variant & >::value, int >::type = 0> | |
| variant & | operator= (T &&value) |
Assignment from an object of supported type T. More... | |
| template<size_t I, class... ARGS> | |
| variant_alternative< I, variant< TS... > >::type & | emplace (ARGS &&... args) |
Emplaces an object as alternative at index I. More... | |
| template<class T , class... ARGS> | |
| T & | emplace (ARGS &&... args) |
Emplaces an object as a type T. More... | |
| size_t | index () const noexcept |
| Gets the zero-based index of the alternative held by this instance. | |
| void | swap (variant &other) |
| Swaps the content of this variant with the other one. More... | |
| bool | valueless_by_exception () const noexcept |
| Returns false only if this instance holds a value. More... | |
Related Functions | |
(Note that these are not member functions.) | |
| template<class T > | |
| static const constexpr size_t | variant_alternatives_size_v = variant_size<T>::value |
| Get the number of alternatives in a variant. | |
| template<size_t I, class... TS> | |
| const variant_alternative_t< I, variant< TS... > > & | get (const variant< TS... > &var) |
Gets the value of the given variant var as the alternative with index I. More... | |
| template<class T , class... TS> | |
| const T & | get (const variant< TS... > &var) |
Gets the value of the given variant var as the alternative with type T. More... | |
| template<size_t I, class... TS> | |
| std::add_pointer< constvariant_alternative_t< I, variant< TS... > > >::type | get_if (const variant< TS... > *pvar) noexcept |
Tries to get the value of the given variant pointer pvar as the alternative with index I. More... | |
| template<class T , class... TS> | |
| std::add_pointer< constT >::type | get_if (const variant< TS... > *pvar) noexcept |
Tries to get the value of the given variant pointer pvar as the alternative with type T. More... | |
| template<class T , class... TS> | |
| bool | holds_alternative (const variant< TS... > &var) noexcept |
Gets whether the variant var holds an instance of type T. More... | |
| template<class VISITOR , class VARIANT > | |
| auto | visit (VISITOR &&visitor, VARIANT &&var) -> decltype(visitor(get< 0 >(var))) |
| Visits the given variant var. Cvb::Shims::visit can only visit one variant (not multiple like std::visit). More... | |
| template<class... TS> | |
| bool | operator== (const variant< TS... > &lhs, const variant< TS... > &rhs) |
| Equality operator for variant objects. More... | |
| template<class... TS> | |
| bool | operator!= (const variant< TS... > &lhs, const variant< TS... > &rhs) |
| Inequality operator for variant objects. More... | |
| template<class... TS> | |
| bool | operator< (const variant< TS... > &lhs, const variant< TS... > &rhs) |
| Less than operator for variant objects. More... | |
| template<class... TS> | |
| bool | operator<= (const variant< TS... > &lhs, const variant< TS... > &rhs) |
| Less-than or equal operator for variant object. More... | |
| template<class... TS> | |
| bool | operator> (const variant< TS... > &lhs, const variant< TS... > &rhs) |
| Greater-than operator for variant object. More... | |
| template<class... TS> | |
| bool | operator>= (const variant< TS... > &lhs, const variant< TS... > &rhs) |
| Greater-than or equal operator for variant object. More... | |
This class is a replacement for C++17 std::variant.
|
inline |
Ctor from an object of supported type T.
| T | Type of value to set. |
| [in] | value | The value to store in this variant. |
| variant_alternative< I, variant< TS... > >::type & emplace | ( | ARGS &&... | args | ) |
Emplaces an object as alternative at index I.
| I | Index of alternative to use. |
| [in] | args | Arguments to be forwarded to alternative's ctor. |
|
inline |
Emplaces an object as a type T.
| T | Type of alternative to use. |
| [in] | args | Arguments to be forwarded to alternative's ctor. |
Copy operator.
| [in] | rhs | Object to copy. |
|
inline |
Assignment from an object of supported type T.
| T | Type of value to set. |
| [in] | value | The value to store in this variant. |
Move operator.
| [in] | rhs | Object to move. |
| void swap | ( | variant< TS > & | other | ) |
Swaps the content of this variant with the other one.
| [in] | other | Other object to swap content with. |
|
inlinenoexcept |
Returns false only if this instance holds a value.
|
related |
Gets the value of the given variant var as the alternative with index I.
| I | Index of alternative to extract. |
| [in] | var | Variant to get the value of. |
| bad_variant_access | thrown if I is unequal variant::index(). |
|
related |
Gets the value of the given variant var as the alternative with type T.
| T | Type to query. |
| [in] | var | Variant to get the value of. |
| bad_variant_access | thrown if T is not a variant alternative. |
|
related |
Tries to get the value of the given variant pointer pvar as the alternative with index I.
| I | Index of alternative to extract. |
| [in] | pvar | Variant to get the value of. |
I is unequal pvar object's index().
|
related |
Tries to get the value of the given variant pointer pvar as the alternative with type T.
| T | Type to query. |
| [in] | pvar | Variant to get the value of. |
T.
|
related |
Gets whether the variant var holds an instance of type T.
| T | Type to test. |
| [in] | var | Variant to check. |
T; false if not. Inequality operator for variant objects.
| [in] | lhs | Left hand side object. |
| [in] | rhs | Right hand side object. |
Less than operator for variant objects.
| [in] | lhs | Left hand side object. |
| [in] | rhs | Right hand side object. |
Less-than or equal operator for variant object.
| [in] | lhs | Left hand side object. |
| [in] | rhs | Right hand side object. |
Equality operator for variant objects.
| [in] | lhs | Left hand side object. |
| [in] | rhs | Right hand side object. |
Greater-than operator for variant object.
| [in] | lhs | Left hand side object. |
| [in] | rhs | Right hand side object. |
Greater-than or equal operator for variant object.
| [in] | lhs | Left hand side object. |
| [in] | rhs | Right hand side object. |
|
related |
Visits the given variant var. Cvb::Shims::visit can only visit one variant (not multiple like std::visit).
| VISITOR | Callable that get the value of the variant as argument. |
| TS | Parameter pack of the variant alternatives. |
| [in] | visitor | Callable to visit the variant var. |
| [in] | var | Variant to visit. |