Partial specialization.
More...
#include <recursive_union.hpp>
|
| recursive_union () |
| Default ctor.
|
|
template<class... Args> |
| recursive_union (constructor< T >, Args &&...args) |
| Construct a T into v More...
|
|
template<class U , class... Args, pgs::enable_if_t< is_recursive_wrapper_containing< T, U >::value, int > = 0> |
| recursive_union (constructor< U >, Args &&...args) noexcept(std::is_nothrow_constructible< U, Args... >::value) |
| Construct (a recursive_wrapper<T> ) into v More...
|
|
template<class U , class... Args, pgs::enable_if_t< and_< not_is_same< T, U > , not_is_recursive_wrapper_containing< T, U >>::value, int > = 0> |
| recursive_union (constructor< U > t, Args &&...args) noexcept( std::is_nothrow_constructible< Ts..., constructor< U >, Args... >::value ) |
| Construct into r More...
|
|
| ~recursive_union () |
| Dtor.
|
|
void | copy (std::size_t i, recursive_union const &u) noexcept( std::is_nothrow_copy_constructible< T >::value &&noexcept(std::declval< recursive_union >().r.copy(i-1, u.r)) ) |
| Copy. More...
|
|
void | move (std::size_t i, recursive_union &&u) noexcept( std::is_nothrow_move_constructible< T >::value &&noexcept(std::declval< recursive_union >().r.move( i-1, std::move(u.r))) ) |
| Move. More...
|
|
void | destruct (std::size_t i) noexcept(std::is_nothrow_destructible< T >::value &&noexcept(std::declval< recursive_union >().r.destruct(i-1))) |
| Destruct. More...
|
|
bool | compare (size_t i, recursive_union const &rhs) const noexcept |
| Equality comparison. More...
|
|
template<class T, class... Ts>
struct pgs::recursive_union< T, Ts... >
Partial specialization.
- Template Parameters
-
T | Type of v in the union |
Ts | recursive_union<Ts...> is the type of r in the union |
template<class T , class... Ts>
template<class... Args>
Construct a T
into v
T
and U
are the same
template<class T , class... Ts>
template<class U , class... Args, pgs::enable_if_t< is_recursive_wrapper_containing< T, U >::value, int > = 0>
Construct (a recursive_wrapper<T>
) into v
T
and U
are different but T
is a recursive wrapper and U
is the type contained in T
template<class T , class... Ts>
template<class U , class... Args, pgs::enable_if_t< and_< not_is_same< T, U > , not_is_recursive_wrapper_containing< T, U >>::value, int > = 0>
Construct into r
T
and U
are different and T
is not a reference wrapper with U
the type contained in T
.
template<class T , class... Ts>
Equality comparison.
If i
is then compare v
against rhs.v
else, recursively invoke compare
on r
and a decremented i
.
- Parameters
-
i | When zero, indicates the LHS object of the comparision |
rhs | The value to compare the LHS against |
template<class T , class... Ts>
Copy.
If i
is then emplace copy-construct v
from u.v
else, recursively invoke copy
on r
and a decremented i
.
- Parameters
-
i | When zero, the destination of the copy |
u | Source of the copy |
template<class T , class... Ts>
Destruct.
If i
is then destruct v
else, recursively invoke destruct
on r
and a decremented i
.
- Parameters
-
i | When zero, the destination of the destruction |
template<class T , class... Ts>
Move.
If i
is then emplace move-construct v
from u.v
else, recursively invoke move
on r
and a decremented i
.
- Parameters
-
i | When zero, the destination of the move |
u | Source of the move |
An anonymous union.
An anonymous union consisting of a field v
of type T
and a field r
of type recursive_union<Ts...>
The documentation for this struct was generated from the following file: