opCmp
Ali Çehreli
acehreli at yahoo.com
Fri Feb 3 08:41:14 PST 2012
On 02/03/2012 06:44 AM, Gor Gyolchanyan wrote:
> Good day.
>
> There's a problem in how opCmp works.
>
> I have a structure, that represents an element of a range. Let's say a
> character. That character can be invalid.
> I need all comparison operators to return false of at least one of the
> operands is invalid.
As an observation, you want to implement the concept of "unordered" for
types, similar to floating point types:
http://dlang.org/expression.html#floating_point_comparisons
I am very surprised that the following operator works with
non-floating-point types:
class C
{
override int opCmp(Object o)
{
return 0;
}
}
void main()
{
auto c = new C;
auto b = (c !<>= c); // <-- compiles!
int i, j;
auto b2 = (i !<>= j); // <-- compiles!
}
Is that supported? Is it a bug? Would using those /unordered/ operator
help in your case?
> with opCmp, the expression a @ b is rewritten as a.opCmp(B) @ 0, which
> doesn't allow me to define such a logic.
> wouldn't it be better to change the rewrite of opCmp to test for exact
> values -1, 0 and 1? In that case I could return 2 and have all
> comparisons fail.
>
Ali
More information about the Digitalmars-d
mailing list