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

Maxim Fomin maxim at maxim-fomin.ru
Sun Nov 24 07:39:19 PST 2013


On Sunday, 24 November 2013 at 15:01:34 UTC, ilya-stromberg wrote:
> On Sunday, 24 November 2013 at 14:50:28 UTC, Maxim Fomin wrote:
>> This is identifiers shadowing issue. In best case you could 
>> not define boolean f, so the problem would not arise in a 
>> first place.
>
> Yes, I agree that it's also can be identifiers shadowing issue. 
> But we allow code like this:
>
> class Foo
> {
> 	int i;
> 	
> 	this(int i)
> 	{
> 		this.i = i;
> 	}
> }
>
>> Anyway, many artifical examples can be provided which shows 
>> that some features behave in unexpected ways which is not a 
>> reason that they are bad.
>
> I repeat, this is REAL LIFE example. I just reduce it because 
> it have unnecessary details for this case.

Many people complain about language features which are really 
broken, misfunctiong, or both. Sometimes they point out on cases 
like:

assert("Unexpected error occured");

which do not show feature failure, but language can be improved 
by rejecting or at least warning in such cases. However your case

class Foo
{
}

class Bar
{
	Foo f;
	
	void bar()
	{
		//variable was wrongly commented here
		//bool f = true;
		
		if(f)
		{
			//Oops!
		}
	}
}

has nothing to do with either of these two types of 
defficiencies. No way compiler could guess that you have bool f 
in mind. There is no way to improve the language because it 
requires blocking class to bool conversion in boolean context 
which is pretty nice feature and there are plenty of code which 
has to be broken.


More information about the Digitalmars-d mailing list