opEquals need to change

Lars Ivar Igesund larsivar at igesund.net
Wed Feb 14 11:07:49 PST 2007


The Tango project received a bug report today, about an int that couldn't be
implicitly converted to a bool.

The offending function is a template function like this

bool equals ( T p1, T p2 )
{
    return p1 == p2;
}

Now, the user had this module instantiated with Object, thus the return
statement becomes

((cast(Object)(p1)).opEquals)(cast(Object)(p2))

and since int no longer are implicitly convertible to bools (very correct
decision to disallow this btw), this operation will fail. It works just
fine with T like any base type though.

This appears to be a very glaring flaw and outright error in Object, and
claiming that this is more efficient is nothing but premature optimization
as using a bool should be eminently optimizable on modern processors.

The link to a page showing the timing of an instruction (used by GCC afaik?)
that should handle this bool graciously (mentioned several times in the
past).

http://www.cs.tut.fi/~siponen/upros/intel/instr/sete_setz.html

-- 
Lars Ivar Igesund
blog at http://larsivi.net
DSource & #D: larsivi
Dancing the Tango



More information about the Digitalmars-d mailing list