4#ifndef TETL_VARIANT_VARIADIC_UNION_HPP
5#define TETL_VARIANT_VARIADIC_UNION_HPP
7#include <etl/_config/all.hpp>
9#include <etl/_cstddef/size_t.hpp>
10#include <etl/_type_traits/index_constant.hpp>
11#include <etl/_type_traits/is_trivially_destructible.hpp>
12#include <etl/_utility/forward.hpp>
13#include <etl/_utility/move.hpp>
14#include <etl/_variant/uninitialized_union.hpp>
18template <
typename... Ts>
22template <
typename T,
typename... Ts>
26 template <
typename... Args>
28 :
head(
etl::forward<Args>(args)...)
32 template <size_t I,
typename... Args>
35 :
tail(index_v<I - 1>,
etl::forward<Args>(args)...)
45 constexpr ~variadic_union()
46 requires(is_trivially_destructible_v<T>
and ...
and is_trivially_destructible_v<Ts>)
52 constexpr auto operator[](index_constant<I> ) & ->
auto&
54 if constexpr (I == 0) {
57 return tail[index_v<I - 1>];
62 constexpr auto operator[](index_constant<I> )
const& ->
auto const&
64 if constexpr (I == 0) {
67 return tail[index_v<I - 1>];
72 constexpr auto operator[](index_constant<I> ) && ->
auto&&
74 if constexpr (I == 0) {
77 return etl::move(
tail)[index_v<I - 1>];
82 constexpr auto operator[](index_constant<I> )
const&& ->
auto const&&
84 if constexpr (I == 0) {
87 return etl::move(
tail)[index_v<I - 1>];
Definition adjacent_find.hpp:9
Definition uninitialized_union.hpp:9
constexpr auto operator=(variadic_union &&other) -> variadic_union &=default
constexpr auto operator[](index_constant< I >) const &&-> auto const &&
Definition variadic_union.hpp:82
constexpr auto operator[](index_constant< I >) &-> auto &
Definition variadic_union.hpp:52
constexpr variadic_union(variadic_union const &other)=default
constexpr variadic_union(index_constant< I >, Args &&... args)
Definition variadic_union.hpp:34
constexpr variadic_union(uninitialized_union)
Definition variadic_union.hpp:24
constexpr auto operator[](index_constant< I >) const &-> auto const &
Definition variadic_union.hpp:62
constexpr variadic_union(variadic_union &&other)=default
TETL_NO_UNIQUE_ADDRESS variadic_union< Ts... > tail
Definition variadic_union.hpp:92
constexpr ~variadic_union()
Definition variadic_union.hpp:49
constexpr auto operator[](index_constant< I >) &&-> auto &&
Definition variadic_union.hpp:72
constexpr auto operator=(variadic_union const &other) -> variadic_union &=default
constexpr variadic_union(index_constant< 0 >, Args &&... args)
Definition variadic_union.hpp:27
TETL_NO_UNIQUE_ADDRESS T head
Definition variadic_union.hpp:91
Definition variadic_union.hpp:19