4#ifndef TETL_TUPLE_TUPLE_CAT_HPP
5#define TETL_TUPLE_TUPLE_CAT_HPP
7#include <etl/_cstddef/size_t.hpp>
8#include <etl/_tuple/forward_as_tuple.hpp>
9#include <etl/_tuple/tuple_like.hpp>
10#include <etl/_tuple/tuple_size.hpp>
11#include <etl/_type_traits/remove_reference.hpp>
12#include <etl/_utility/forward.hpp>
13#include <etl/_utility/index_sequence.hpp>
19inline constexpr struct tuple_cat {
20 template <etl::tuple_like T1, etl::tuple_like T2,
etl::size_t... I1,
etl::size_t... I2>
21 [[nodiscard]]
constexpr auto
22 concat(T1&& t1, T2&& t2,
etl::index_sequence<I1...> ,
etl::index_sequence<I2...> )
const
25 return etl::forward_as_tuple(get<I1>(
etl::forward<T1>(t1))..., get<I2>(
etl::forward<T2>(t2))...);
28 template <etl::tuple_like Result>
29 [[nodiscard]]
constexpr auto operator()(Result&& result)
const
31 return [&]<etl::size_t... Is>(
etl::index_sequence<Is...> ) {
33 return etl::
tuple{get<Is>(
etl::forward<Result>(result))...};
34 }(
etl::make_index_sequence<
etl::tuple_size_v<
etl::remove_reference_t<Result>>>{});
37 template <etl::tuple_like Result, etl::tuple_like Head, etl::tuple_like... Tail>
38 [[nodiscard]]
constexpr auto operator()(Result&& result, Head&& head, Tail&&... tail)
const
40 constexpr auto idx1 =
etl::make_index_sequence<
etl::tuple_size_v<
etl::remove_reference_t<Result>>>{};
41 constexpr auto idx2 =
etl::make_index_sequence<
etl::tuple_size_v<
etl::remove_reference_t<Head>>>{};
43 concat(
etl::forward<Result>(result),
etl::forward<Head>(head), idx1, idx2),
44 etl::forward<Tail>(tail)...
51template <
etl::tuple_like... Tuples>
52[[nodiscard]]
constexpr auto tuple_cat(Tuples&&... ts)
54 return etl::detail::tuple_cat(
etl::forward<Tuples>(ts)...);
Definition adjacent_find.hpp:9
constexpr auto tuple_cat(Tuples &&... ts)
Definition tuple_cat.hpp:52