| 170 | |
| 171 | template <class T, class F> |
| 172 | CUTE_HOST_DEVICE constexpr |
| 173 | void |
| 174 | for_each(T&& t, F&& f) |
| 175 | { |
| 176 | if constexpr (is_tuple<remove_cvref_t<T>>::value) { |
| 177 | return detail::apply(t, [&](auto&&... a) { (f(static_cast<decltype(a)&&>(a)), ...); }, tuple_seq<T>{}); |
| 178 | } else { |
| 179 | return f(static_cast<T&&>(t)); |
| 180 | } |
| 181 | |
| 182 | CUTE_GCC_UNREACHABLE; |
| 183 | } |
| 184 | |
| 185 | template <class T, class F> |
| 186 | CUTE_HOST_DEVICE constexpr |