説明が悪すぎました
動作を見てみると
op(*(first + i))
と記述したほうが良いと思うのですが、
op(*(first + (i - result)))
としなければいけない理由はあるのでしょうか?
単純に引数を返す関数を与えてやると、firstからlastの値を、resultからresult+(last-first)にコピーすることになり、
op(*(first+(i-result)))と説明できる動作で無いように思えます。

そもそも、イテレータ同士を足し合わせるような記述が良いのかどうかもわかっていませんが