From copperwater: a recently added use of <test> ? <if> : <else>
had a ptrdiff_t (signed) expression for <if> and a size_t (unsigned)
expression for <else> which triggered a sign-compare warning when
the two expressions are implicitly converted into the same type.
Use casts to convert both expressions to long rather that convert
the size_t half to ptrdiff_t or vice versa. The final result gets
cast to int already.
Fixes#689