3#ifndef TETL_TUPLE_TUPLE_HPP
4#define TETL_TUPLE_TUPLE_HPP
33template <etl::
size_t I,
typename T>
37 template <
typename... Args>
38 constexpr tuple_leaf(Args&&... args)
39 : _value{etl::
forward<Args>(args)...}
43 [[nodiscard]]
constexpr auto get_impl(
index_constant<I> ) &
noexcept -> T& {
return _value; }
45 [[nodiscard]]
constexpr auto get_impl(
index_constant<I> )
const&
noexcept -> T
const& {
return _value; }
49 [[nodiscard]]
constexpr auto get_impl(
index_constant<I> )
const&&
noexcept -> T
const&&
64template <
typename... Ts>
67template <
size_t... Idx,
typename... Ts>
68struct tuple_impl<etl::
index_sequence<Idx...>, Ts...> : tuple_leaf<Idx, Ts>... {
73 : tuple_leaf<Idx, Ts>{}...
80 : tuple_leaf<Idx, Ts>(args)...
85 template <
typename... Args>
92 constexpr tuple_impl(tuple_impl
const&) =
default;
93 constexpr tuple_impl(tuple_impl&&) noexcept = default;
95 using tuple_leaf<Idx, Ts>::get_type...;
96 using tuple_leaf<Idx, Ts>::get_impl...;
106template <
typename... Ts>
109 template <
size_t I,
typename T>
111 template <
size_t N,
typename... Us>
113 template <
size_t N,
typename... Us>
115 template <
size_t N,
typename... Us>
117 template <
size_t N,
typename... Us>
119 template <
typename T,
typename... Us>
121 template <
typename T,
typename... Us>
123 template <
typename T,
typename... Us>
125 template <
typename T,
typename... Us>
131 template <etl::
size_t I>
134 return _impl.get_impl(ic);
137 template <etl::
size_t I>
140 return _impl.get_impl(ic);
143 template <etl::
size_t I>
149 template <etl::
size_t I>
155 template <etl::
size_t I>
173 template <
typename... Args>
188 static_assert(I <
sizeof...(Ts));
192template <
typename... Ts>
195template <
typename... Ts>
201 static_assert(I <
sizeof...(Ts));
208 static_assert(I <
sizeof...(Ts));
215 static_assert(I <
sizeof...(Ts));
222 static_assert(I <
sizeof...(Ts));
226template <
typename... Ts,
typename... Us>
227 requires(
sizeof...(Ts) ==
sizeof...(Us))
230 if constexpr (
sizeof...(Ts) == 0) {
#define TETL_NO_UNIQUE_ADDRESS
Definition attributes.hpp:41
constexpr auto move(InputIt first, InputIt last, OutputIt destination) -> OutputIt
Moves the elements in the range [first, last), to another range beginning at destination,...
Definition move.hpp:26
Definition adjacent_find.hpp:8
constexpr bool is_copy_constructible_v
Definition is_copy_constructible.hpp:30
integral_constant< size_t, I > index_constant
Definition index_constant.hpp:12
constexpr bool is_constructible_v
Definition is_constructible.hpp:24
constexpr auto is_tuple_like
Definition is_tuple_like.hpp:9
auto declval() noexcept -> add_rvalue_reference_t< T >
etl::make_index_sequence< sizeof...(T)> index_sequence_for
Definition index_sequence.hpp:18
constexpr auto index_v
Definition index_constant.hpp:15
constexpr auto get(complex< X > &z) noexcept -> X &
Definition complex.hpp:92
constexpr bool is_default_constructible_v
Definition is_default_constructible.hpp:26
etl::integer_sequence< etl::size_t, Ints... > index_sequence
Definition index_sequence.hpp:12
constexpr auto is_implicit_default_constructible_v
Definition is_implicit_default_constructible.hpp:26
auto swap(inplace_function< R(Args...), Capacity, Alignment > &lhs, inplace_function< R(Args...), Capacity, Alignment > &rhs) noexcept -> void
Overloads the etl::swap algorithm for etl::inplace_function. Exchanges the state of lhs with that of ...
Definition inplace_function.hpp:249
constexpr bool is_convertible_v
Definition is_convertible.hpp:46
constexpr auto forward(remove_reference_t< T > ¶m) noexcept -> T &&
Forwards lvalues as either lvalues or as rvalues, depending on T. When t is a forwarding reference (a...
Definition forward.hpp:18
TETL_BUILTIN_SIZET size_t
etl::size_t is the unsigned integer type of the result of the sizeof operator.
Definition size_t.hpp:14
constexpr bool is_nothrow_swappable_v
Definition is_nothrow_swappable.hpp:19
Definition integral_constant.hpp:9
decltype(declval< tuple< Ts... > >().get_type(etl::index_v< I >)) type
Definition tuple.hpp:189
Provides compile-time indexed access to the type of the elements of the array using tuple-like interf...
Definition array.hpp:267
Definition tuple_size.hpp:15
constexpr tuple(tuple const &)=default
constexpr tuple(tuple &&) noexcept=default
friend constexpr auto get(tuple< Us... > &t) -> auto &
friend constexpr auto get(tuple< Us... > const &&t) -> auto const &&
friend struct tuple_element
Definition tuple.hpp:110
constexpr auto swap(tuple &other) noexcept((is_nothrow_swappable_v< Ts > &&...)) -> void
Definition tuple.hpp:183
friend constexpr auto get(tuple< Us... > const &t) -> auto const &
friend constexpr auto get(tuple< Us... > &&t) -> auto &&