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

ilya-stromberg ilya-stromberg-2009 at yandex.ru
Sun Nov 24 06:18:48 PST 2013


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

So, C style 'if(ptr != NULL)' isn't allowed in D.


More information about the Digitalmars-d mailing list