I believe that won't work with OCaml's GC because it contains a copying
collector, obviating a total ordering over pairs of pointers.

The pointer used in total ordering is points outside the heap, into the OCaml code (either machine code or byte-code), which, as far as I know, is neither moved nor collected (although this would actually be a useful feature, unloading modules...)