DMD can implicitly convert class pointer to the bool. Is it bug or terrible feature?

Ary Borenszweig ary at esperanto.org.ar
Sun Nov 24 13:38:19 PST 2013


On 11/24/13 11:18 AM, ilya-stromberg wrote:
> On Sunday, 24 November 2013 at 14:12:18 UTC, Maxim Fomin wrote:
>> void* ptr;
>> if(ptr)
>>
>> was a shortcut for 'if(ptr != NULL)' probably since C was created.
>
> Small code change:
>
> import std.stdio;
>
> class Foo
> {
> }
>
> void main()
> {
>      Foo f;
>
>      if(f == null)
>      {
>          writeln("f is true");
>      }
>
>      if(f != null)
>      {
>          writeln("f is false");
>      }
> }
>
> DMD output:
>
> Error: use 'is' instead of '==' when comparing with null
> Error: use '!is' instead of '!=' when comparing with null

Ugh, if the compiler disallows comparison of reference with "==" and 
"!=" and tells you to use "is" and "!is", can't compiler just allow you 
to write "==" and understand it as "is"? What's the big deal?



More information about the Digitalmars-d mailing list