return in_reverse?
        (right > left) - (right < left)
      : (left > right) - (left < right);
I prefer (with "greater" being ±1, defaulting to +1):

    return left < right ? -greater :
           left > right ? greater :
           0;