non-virtual compare