else not attaching properly to if
    Matti Niemenmaa 
    see_signature at for.real.address
       
    Mon Oct 29 08:07:01 PDT 2007
    
    
  
nobody wrote:
> I do not think it should ever be the case that this block:
> 
>   if(false)
>     if(true)
>     {
>       assert(false);
>     }
>   else
>   {
>     assert(true);
>   }
> 
> should ever be functionally different from this block:
> 
> 
>   if(false)
>   {
>     if(true)
>     {
>       assert(false);
>     }
>   }
>   else
>   {
>     assert(true);
>   }
> 
> The compiler agrees with me in this simple case.
No, you've got it wrong. It's:
if (false) {
	if (true) {
		assert (false);
	} else {
		assert (true);
	}
}
Which compiles down to nothing since if (false) is always false.
The compiler appears to agree because both blocks actually do nothing. Compile
and run this:
import std.stdio;
void main() {
	writefln("%d", f      (false,true));
	writefln("%d", f_wrong(false,true));
	writefln("%d", f_right(false,true));
}
int f(bool a, bool b) {
	if (a)
		if (b) {
			return 0;
		} else {
			return 1;
		}
	return 2;
}
int f_wrong(bool a, bool b) {
	if (a) {
		if (b) {
			return 0;
		}
	} else {
		return 1;
	}
	return 2;
}
int f_right(bool a, bool b) {
	if (a) {
		if (b) {
			return 0;
		} else {
			return 1;
		}
	}
	return 2;
}
-- 
E-mail address: matti.niemenmaa+news, domain is iki (DOT) fi
    
    
More information about the Digitalmars-d-bugs
mailing list