In ranges::advance(iter, n, bound), we'd incorrectly handle the case
where bound < iter and n is 0:
int a[10]; int *p = a+5; int *bound = a+3; std::ranges::advance(p, 0, bound); assert(p - a == 5); // we'd return 3 before this patch
This was caused by an incorrect handling of 0 inside __magnitude_eq.
I'm open to bikeshedding this implementation.
AFAICT, this implementation is a general-purpose magnitude->= implementation that doesn't suffer from overflow (I think).
We technically don't need something as general, but my preference would be to keep it general unless we have a noticeably more performant implementation, because keeping it general makes it easier to understand.