opCmp, [partial/total/pre]orders, custom floating point types etc.

John Colvin via Digitalmars-d digitalmars-d at puremagic.com
Tue Jan 12 13:22:42 PST 2016


On Tuesday, 12 January 2016 at 21:12:08 UTC, tsbockman wrote:
> On Tuesday, 12 January 2016 at 20:56:41 UTC, John Colvin wrote:
>> Please consider the second design I proposed? It's small, 
>> simple, has no impact on existing code and works in the right 
>> direction (library types can emulate / act as replacements for 
>> builtins) as opposed to the other way (library types are 
>> second class).
>
> If non-total ordering is going to be supported, I don't 
> understand what's wrong with just allowing this:
>
>     bool opCmp(string op, T)(T right) const { }
>
> As an alternative to the current:
>
>     bool opEquals(T)(T right) const { }
>     int opCmp(T)(T right) const { }
>
> Make it a compile-time error for a type to implement both. 
> There is no need to deprecate the current system - people can 
> even be encouraged to continue using it, in the very common 
> case where it can actually express the desired logic.
>
> This approach is simple and breaks no existing code. It is also 
> optimally efficient with respect to runtime performance.

I would kindof like that (it would definitely allow me to do what 
I want, as well as anything else I have failed to notice I need 
yet), but it flies quite strongly against Walter's (and mine to 
some extent) views that we'll only end up with C++-like abuse of 
the overloading if we allow that. Having > and < overloaded 
separately is asking for trouble.

Another possibility would be to introduce opCmpEquals(T)(T rhs) 
to handle [<>]= explicitly.


More information about the Digitalmars-d mailing list