5#ifndef INCLUDE_GUARD_ARENE_BASE_ARENE_BASE_TUPLE_FOR_EACH_HPP_
6#define INCLUDE_GUARD_ARENE_BASE_ARENE_BASE_TUPLE_FOR_EACH_HPP_
12#include "arene/base/constraints/constraints.hpp"
13#include "arene/base/functional/invoke.hpp"
14#include "arene/base/monostate/monostate.hpp"
15#include "arene/base/stdlib_choice/cstddef.hpp"
16#include "arene/base/stdlib_choice/enable_if.hpp"
17#include "arene/base/stdlib_choice/forward.hpp"
18#include "arene/base/stdlib_choice/integer_sequence.hpp"
19#include "arene/base/stdlib_choice/integral_constant.hpp"
20#include "arene/base/stdlib_choice/remove_reference.hpp"
21#include "arene/base/stdlib_choice/tuple_size.hpp"
22#include "arene/base/tuple/detail/get.hpp"
23#include "arene/base/type_manipulation/consume_values.hpp"
24#include "arene/base/type_traits/is_invocable.hpp"
32namespace tuple_for_each_detail {
42template <
typename F,
typename... ArgTypes, constraints<std::enable_if_t<is_invocable_v<F, ArgTypes...>>> =
nullptr>
43constexpr auto invoke_for_consume(F&& func, ArgTypes&&... args)
noexcept(is_nothrow_invocable_v<F, ArgTypes...>)
45 static_cast<
void>(arene::base::invoke(std::forward<F>(func), std::forward<ArgTypes>(args)...));
58template <
typename Tuple,
typename Op, std::size_t... I>
59constexpr void for_each(Tuple&& tuple, Op&& operation, std::index_sequence<I...>) {
60 consume_values({invoke_for_consume(std::forward<Op>(operation), tuple_detail::get<I>(std::forward<Tuple>(tuple)))...}
75template <
typename Tuple,
typename Op, std::size_t... I>
76constexpr void for_each_index(Tuple&& tuple, Op&& operation, std::index_sequence<I...>) {
77 consume_values({invoke_for_consume(
78 std::forward<Op>(operation),
79 std::integral_constant<std::size_t, I>{},
80 tuple_detail::get<I>(std::forward<Tuple>(tuple))
107template <
typename Tuple,
typename Op>
108constexpr void for_each(Tuple&& tuple, Op&& operation) {
109 tuple_for_each_detail::for_each(
110 std::forward<Tuple>(tuple),
111 std::forward<Op>(operation),
112 std::make_index_sequence<std::tuple_size<std::remove_reference_t<Tuple>>::value>{}
142template <
typename Tuple,
typename Op>
144 tuple_for_each_detail::for_each_index(
145 std::forward<Tuple>(tuple),
146 std::forward<Op>(operation),
147 std::make_index_sequence<std::tuple_size<std::remove_reference_t<Tuple>>::value>{}
Definition array_exceptions_disabled.cpp:11
constexpr void for_each_index(Tuple &&tuple, Op &&operation)
Perform an operation on each element of a "tuple-ish" type, which includes std::tuple,...
Definition for_each.hpp:143
constexpr void for_each(Tuple &&tuple, Op &&operation)
Perform an operation on each element of a "tuple-ish" type, which includes std::tuple,...
Definition for_each.hpp:108
Copyright 2026, Toyota Motor Corporation.
Definition array_exceptions_disabled.cpp:10