#ifndef PFOR_PFOR_INDEX_OP_H #define PFOR_PFOR_INDEX_OP_H #include #define PFOR_INDEX_DEF_OPERATION_UNARY(OPNAME, OPSYM) \ struct OPNAME { \ template \ inline static decltype(auto) eval(Rhs&& rhs) { \ return OPSYM std::forward(rhs); \ } \ } #define PFOR_INDEX_DEF_OPERATION_BINARY(OPNAME, OPSYM) \ struct OPNAME { \ template \ inline static decltype(auto) eval(Lhs&& lhs, Rhs&& rhs) { \ return std::forward(lhs) OPSYM std::forward(rhs); \ } \ } namespace pfor { namespace index { namespace op { PFOR_INDEX_DEF_OPERATION_UNARY(Minus, -); PFOR_INDEX_DEF_OPERATION_BINARY(Addition, +); PFOR_INDEX_DEF_OPERATION_BINARY(Subtraction, -); PFOR_INDEX_DEF_OPERATION_BINARY(Multiplication, *); // PFOR_INDEX_DEF_OPERATION_BINARY(Division, /); } } } #undef PFOR_INDEX_DEF_OPERATION_BINARY #undef PFOR_INDEX_DEF_OPERATION_UNARY #endif