3#ifndef pRC_CORE_TENSOR_FUNCTIONS_LOOP_H
4#define pRC_CORE_TENSOR_FUNCTIONS_LOOP_H
12 template<
class F,
class... Xs>
13 requires(IsTensorish<RemoveReference<Xs>> && ...) &&
14 (
sizeof...(Xs) > 0) &&
15 (IsSame<typename TupleElement<0, Tuple<RemoveReference<Xs>...>>
::Sizes,
16 typename RemoveReference<Xs>::Sizes> &&
19 ResultOf<Xs, typename RemoveReference<Xs>::Subscripts>...>
20 static inline constexpr auto loop(F &&f, Xs &&...args)
30 forward<F>(f),
view(forward<Xs>(args))...);
34 return eval(
loop(forward<F>(f), args...));
38 template<
class F,
class... Xs>
39 requires(IsTensorish<RemoveReference<Xs>> && ...) &&
40 requires {
loop(declval<F>(), declval<Xs>()...); }
41 static inline constexpr auto loop(Xs &&...args)
43 return loop(F(), forward<Xs>(args)...);
Definition concepts.hpp:31
pRC::Float<> T
Definition externs_nonTT.hpp:1
Definition cholesky.hpp:10
std::invoke_result_t< F, Args... > ResultOf
Definition basics.hpp:59
std::remove_reference_t< T > RemoveReference
Definition basics.hpp:41
static constexpr decltype(auto) view(X &&a)
Definition view.hpp:13
std::common_type_t< Ts... > Common
Definition basics.hpp:53
Sequence< Size, Ns... > Sizes
Definition sequence.hpp:100
static constexpr auto loop(F &&f, Xs &&...args)
Definition loop.hpp:20
RemoveConst< RemoveReference< T > > RemoveConstReference
Definition basics.hpp:47
static constexpr decltype(auto) eval(X &&a)
Definition eval.hpp:12