On Sep 15, 2025, at 19:25, Yongwei Wu via Std-Discussion <std-discussion@lists.isocpp.org> wrote:
Another angle: Can we make operator< on pointers
implementation-defined, as more often than not it has quite
well-defined behaviour? UB is a dangerous thing, and it is better to
have as little UB as possible. (I also hate the fact that sometimes
compilers utilize UB as a crazy licence to kill, and I do not want
anything like that for something as simple as p1 < p2.)
It's not UB, is it? Rather, the result is unspecified:
https://eel.is/c++draft/expr.rel#4 and
https://eel.is/c++draft/expr.rel#5. If `p1` and `p2` don't point within the same array, then `p1 < p2` may yield true or it may yield false, but it can't impregnate your pets or summon nasal demons. It need not be consistent with any total or partial order, so `p1 < p2 && p2 < p1` could be true, as could `p1 < p2 && p2 < p3 && p3 < p1`. But there's no "license to kill".