Operator overloading, structs

Don nospam at nospam.com
Tue Jun 9 17:02:44 PDT 2009


bearophile wrote:
> Leandro Lucarella:
>> I think the more general solution is to allow multiple implicit cast
>> operators and simply provide implicit conversion to bool for the classes
>> you want to be able to do if (x) on.

No, it's not more general. You do NOT want to allow conversion to bool. 
  The reason is that bool can itself be implicitly converted, eg this 
compiles:

    bool b = true;
    int y = b;

--
And that's a disaster:

struct Foo
{
   bool opImplicitCast() { return true; }
}

Foo x;
if (x) { ... }  // OK
int y = x;      // This would compile!!!!

C++ libraries go to a fair bit of trouble to allow if(x) without 
allowing x to be converted to bool.



More information about the Digitalmars-d mailing list