Problem with using && as shorthand for if

Jay Byrd JayByrd at rebels.com
Mon Sep 6 19:11:04 PDT 2010


On Fri, 20 Aug 2010 20:33:43 +0000, Iain Buclaw wrote:

> == Quote from Ersin Er (ersin.er at gmail.com)'s article
>> Hi,
>> The following code compiles and outputs "1 = 1" as expected: 1 == 1 &&
>> writeln("1 = 1");
>> However, the following code fails to compile (although it should not):
>> 1 == 2 && writeln("1 = 2");
>> The error is as follows:
>> Error: integral constant must be scalar type, not void What I expect
>> that the second code should also compile and output nothing when
> executed.
>> Am I missing something?
>> Thanks.
> 
> Because you are dealing with literals here, it's best to assume the
> compiler will try to evaluate and compile down the code you write.
> 
> The first example you give will be optimized down to just
> 
>     writeln("1 = 1");
> 
> Whilst your second example is simply
> 
>    false;
> 
> 
> Regards

And the relevance of that to the OP's post which noted that

1 == 2 && writeln("1 = 2");

produces an error message complaining about void where a scalar is 
expected is what?

Also irrelevant are statements that Andrei is wrong or even has taken 
leave of his senses merely for accurately describing in his book a 
particular bit of D's semantics that he may or may not have had any role 
in crafting.


More information about the Digitalmars-d-learn mailing list