A solution using postincrement directly:
template <class OutputIterator, class NArryOperator,
class InputIterator, class... InputIterators>
OutputIterator transform_n(OutputIterator out_iter, NArryOperator oper,
InputIterator iter1begin, InputIterator iter1end,
InputIterators... args)
{
while(iter1begin != iter1end)
{
*out_iter++ = oper(*iter1begin++, (*args++)...);
}
return out_iter;
}
About incrementing in the "increment-expression" of a for-statement:
You can't expand in the "increment-expression" of the for-statement; pack expansion is restricted to a few contexts, such that operator,
overloads cannot apply [temp.variadic]/4. The usual tricks are required, such as expanding in a function call (what you used) or using a dummy array:
using iarr = int[];
for (; iter1begin != iter1end;
++out_iter,++iter1begin,(void)iarr{0, (++args,void(),0)...})