On Wed, Jul 23, 2014 at 02:35:03PM -0700, Andrei Alexandrescu via Digitalmars-d wrote: > On 7/23/14, 11:52 AM, H. S. Teoh via Digitalmars-d wrote: [...] > >I fully agree that we should not autogenerate opCmp if the user > >defines opEquals, since not all types comparable with equality are > >orderable. However, surely all orderable types are > >equality-comparable! > > http://en.wikipedia.org/wiki/Lattice_(order) [...]
And why should this be the default behaviour? The <, <=, >=, > operators imply linear ordering, not general partial order. If you really want to implement a non-linear partial ordering, you can always define both opCmp and opEquals. This should be the *non*-default case, since in the vast majority of cases, defining opCmp means you want a linear ordering. Linear ordering should be default, and partial ordering possible if the programmer explicitly asks for it (by implementing opEquals manually). T -- Winners never quit, quitters never win. But those who never quit AND never win are idiots.