On Friday, August 20, 2010 13:06:11 div0 wrote: > On 20/08/2010 20:59, Ersin Er wrote: > > 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. > > The return type of writeln is void. > You can't && with void. > > You are asking > > 'is X true AND <something which can't return true or false> is true' > > which is clearly nonesense.
It's legal according to TDPL. It seems to be intended to be used as a shorthand for if. So, stuff like condition && writeln("my output"); are supposed to be perfectly legal as bizarre as that may seem. I don't believe that it would be legal to do if(condition && writeln("my output")) { } since the result fed to if must be a bool, but a statement doesn't need to result in bool, so apparently you can use && with a void function in a statement. It's just that the void function must be last. - Jonathan M Davis