On Tuesday, 19 September 2017 at 17:40:20 UTC, EntangledQuanta
wrote:
writeln(x + ((_win[0] == '@') ? w/2 : 0));
writeln(x + (_win[0] == '@') ? w/2 : 0);
The first returns x + w/2 and the second returns w/2!
WTF!!! This stupid bug has caused me considerable waste of
time. Thanks Walter! I know you care so much about my time!
I assume someone is going to tell me that the compiler treats
it as
writeln((x + (_win[0] == '@')) ? w/2 : 0);
Yeah, that is really logical! No wonder D sucks and has so many
bugs! Always wants me to be explicit about the stuff it won't
figure out but it implicitly does stuff that makes no sense.
The whole point of the parenthesis is to inform the compiler
about the expression to use. Not use everything to the left of
?.
Thanks for wasting some of my life... Just curious about who
will justify the behavior and what excuses they will give.
Why do you claim that a bug in your code is a compiler bug? Check
"Operator precedence" [1]. There is really no reason why the
current precedence is less "logical" than what you're awaiting.
And try to think about things you're writing, nobody forces you
to use D.
[1] https://wiki.dlang.org/Operator_precedence