Effects:
Computes its result by
initializing the accumulator acc with the initial value init
and then modifying it with
acc = std​::​move(acc)+(*i1)*(*i2) or
acc = binary_­op1(std​::​move(acc), binary_­op2(*i1, *i2))
for every iterator i1 in the range [first1, last1)
and iterator i2 in the range [first2, first2 +(last1 - first1))
in order.