the `operator-` of PrZip iterators doesn't reflect how many `++` lie between them.
It appears (demonstrator) that STL algorithms do not always check the end conditions of their underlying loops by calling iterator != range.end()
. Instead they take the difference end() - begin()
and use that for looping. For the current iterators of PrZip, the number if increments necessary to get from begin to end (iter = begin(); iter++; iter++; iter++; iter == end()
) is not equal to the difference reported by end()-begin()
. the difference actually reports the offset at which the end()
iterator is, but the ++
operator increments the offset by one SIMD width (e.g. 4). This can lead to cases where std::all_of
runs outside of the allocated storage (runs four times further than it has to).