5#ifndef INCLUDE_GUARD_ARENE_BASE_ARENE_BASE_TUPLE_TUPLE_CAT_HPP_
6#define INCLUDE_GUARD_ARENE_BASE_ARENE_BASE_TUPLE_TUPLE_CAT_HPP_
12#include "arene/base/compiler_support/cpp14_inline.hpp"
13#include "arene/base/constraints/constraints.hpp"
14#include "arene/base/integer_sequences.hpp"
15#include "arene/base/stdlib_choice/cstddef.hpp"
16#include "arene/base/stdlib_choice/declval.hpp"
17#include "arene/base/stdlib_choice/enable_if.hpp"
18#include "arene/base/stdlib_choice/forward.hpp"
19#include "arene/base/stdlib_choice/forward_as_tuple.hpp"
20#include "arene/base/stdlib_choice/integer_sequence.hpp"
21#include "arene/base/stdlib_choice/remove_cv.hpp"
22#include "arene/base/stdlib_choice/remove_reference.hpp"
23#include "arene/base/stdlib_choice/tuple.hpp"
24#include "arene/base/stdlib_choice/tuple_size.hpp"
25#include "arene/base/tuple/detail/as_type_list.hpp"
26#include "arene/base/tuple/detail/get.hpp"
27#include "arene/base/type_list/concat.hpp"
28#include "arene/base/type_manipulation/repeat_type.hpp"
29#include "arene/base/type_traits/all_of.hpp"
30#include "arene/base/type_traits/is_tuple_like.hpp"
31#include "arene/base/type_traits/remove_cvref.hpp"
37namespace tuple_cat_detail {
42template <
class Is, std::size_t... Sizes>
43class tuple_index_seq_impl;
51template <std::size_t... Is, std::size_t... Sizes>
52class tuple_index_seq_impl<std::index_sequence<Is...>, Sizes...> {
55 using type = integer_sequence_cat<std::index_sequence<>, make_index_sequence_repeat_n<Is, Sizes>...>;
64template <std::size_t... Sizes>
65using tuple_index_seq_t =
typename tuple_index_seq_impl<std::make_index_sequence<
sizeof...(Sizes)>, Sizes...>::type;
72template <std::size_t... Sizes>
73class element_index_seq_impl {
76 using type = integer_sequence_cat<std::index_sequence<>, std::make_index_sequence<Sizes>...>;
85template <std::size_t... Sizes>
86using element_index_seq_t =
typename element_index_seq_impl<Sizes...>::type;
91using tuple_cat_result_t = type_lists::concat_t<std::tuple<>, tuple_detail::as_type_list_t<Ts>...>;
145 template <
class Result,
class Bundle, std::size_t... TupleIndices, std::size_t... ElementIndices>
146 static constexpr auto
147 impl(Bundle&& bundle, std::index_sequence<TupleIndices...>, std::index_sequence<ElementIndices...>)
noexcept(
148 noexcept(Result{tuple_detail::get<ElementIndices>(tuple_detail::get<TupleIndices>(std::declval<Bundle>()))...})
150 return Result{tuple_detail::get<ElementIndices>(tuple_detail::get<TupleIndices>(std::forward<Bundle>(bundle)))...};
181 constraints<std::enable_if_t<all_of_v<is_tuple_like_v<Ts>...>>> =
nullptr,
182 class Result = tuple_cat_result_t<remove_cvref_t<Ts>...>,
183 class TupleIndices = tuple_index_seq_t<std::tuple_size<remove_cvref_t<Ts>>::value...>,
184 class ElementIndices = element_index_seq_t<std::tuple_size<remove_cvref_t<Ts>>::value...>>
185 constexpr auto operator()(Ts&&... args)
const
186 noexcept(
noexcept(impl<Result>(std::declval<std::tuple<Ts&&...>>(), TupleIndices{}, ElementIndices{})))
188 return impl<Result>(std::forward_as_tuple(std::forward<Ts>(args)...), TupleIndices{}, ElementIndices{});
Definition array_exceptions_disabled.cpp:11
ARENE_CPP14_INLINE_VARIABLE(tuple_cat_detail::tuple_cat_fn, tuple_cat)
Copyright 2026, Toyota Motor Corporation.
Definition array_exceptions_disabled.cpp:10