#ifndef PFOR_PFOR_EXPRESSION_SUBEXPRESSION_H #define PFOR_PFOR_EXPRESSION_SUBEXPRESSION_H #include #include "../expression/operators.h" namespace pfor { namespace expr { template struct SubExpressionImpl; template class P, typename Expr, typename... Exprs> struct SubExpressionImpl> { using type = CommaMerger>::type>; }; template class P, typename Expr> struct SubExpressionImpl> { using type = Expression; }; template using SubExpression = typename SubExpressionImpl

::type; template decltype(auto) subExpressionImpl(std::tuple& tuple, std::index_sequence) { return commaMerger(std::get(tuple)...); } template decltype(auto) subExpression(std::tuple& tuple) { return subExpressionImpl(tuple, std::make_index_sequence()); } template decltype(auto) subExpression(std::tuple& tuple) { return std::get<0>(tuple); } template decltype(auto) expressionView(Expression& e) { return Expression, View, Exprs...>{e}; } template decltype(auto) expressionView(Expression& e) { return e; } } } #endif