A tagged union that provide a storage space being a standard layout type suited for all its type variants specified in the type list _Ts_.
More...
#include "utility.hpp"
Public Types | |
| using | storage_type = typename aligned_union< _Ts_... >::type |
Public Member Functions | |
| union_storage ()=default | |
| Create an uninitialized union storage. | |
| union_storage (const union_storage &)=delete | |
| union_storage & | operator= (const union_storage &)=delete |
| union_storage (union_storage &&)=delete | |
| union_storage & | operator= (union_storage &&)=delete |
| template<typename _T_ , typename = std::enable_if_t< is_convertible_to_one_of< _T_, _Ts_... >::value >> | |
| union_storage (const _T_ &_value) | |
| Create a union with a copy-initialized value from the specified one. | |
| template<typename _T_ , typename = std::enable_if_t< is_convertible_to_one_of< _T_, _Ts_... >::value >> | |
| union_storage (_T_ &&_value) | |
| Create a union with a move-initialized value from the specified value. | |
| const std::type_info * | tag () const noexcept |
| The type tag of the stored value. More... | |
| operator bool () const noexcept | |
Equivalent to (tag() != nullptr). | |
Functions to reinitialize the union storage: | |
| |
| template<typename _T_ > | |
| std::enable_if< is_convertible_to_one_of< _T_, _Ts_... >::value >::type | reset () |
Reinitialize the union storage with a default value of the one of the type from _Ts_ list that the specified type _T_ is convertible to. | |
| template<typename _T_ , typename... _Args_> | |
| std::enable_if< is_convertible_to_one_of< _T_, _Ts_... >::value >::type | reset (_Args_ &&... _args) |
| Ditto but the value is created from the arguments forwarded to the type constructor. | |
| template<typename _T_ > | |
| std::enable_if< is_convertible_to_one_of< _T_, _Ts_... >::value >::type | reset (const _T_ &_value) |
| Ditto but the value is copy-created from the specified argument. | |
| template<typename _T_ > | |
| std::enable_if< is_convertible_to_one_of< _T_, _Ts_... >::value >::type | reset (_T_ &&_value) |
| Ditto but the value is move-created from the specified argument. | |
Functions to get the value stored in the union: | |
| template<typename _T_ , typename = std::enable_if_t< is_one_of< _T_, _Ts_... >::value >> | |
| const std::decay< _T_ >::type & | get () const noexcept |
| template<typename _T_ , typename = std::enable_if_t< is_one_of< _T_, _Ts_... >::value >> | |
| std::decay< _T_ >::type & | get () noexcept |
A tagged union that provide a storage space being a standard layout type suited for all its type variants specified in the type list _Ts_.
Only values from the specified set of types _Ts_ are created and stored in the union even though the values of any types that are implicitly convertible to one of the types from _Ts_ list are acceptable for copy- or move-initialization reset() functions.
Definition at line 527 of file utility.hpp.
|
inlinenoexcept |
The type tag of the stored value.
It's just a pointer referring to the static global constant object returned by the typeid() operator for the type of the value currently stored in this union_storage variable. nullptr is returned if the union is not initialized and is not storing any value.
Definition at line 655 of file utility.hpp.