D Logic bug

Jonathan Marler johnnymarler at gmail.com
Thu Oct 11 19:09:14 UTC 2018


On Thursday, 11 October 2018 at 14:35:34 UTC, James Japherson 
wrote:
> Took me about an hour to track this one down!
>
> A + (B == 0) ? 0 : C;
>
> D is evaluating it as
>
> (A + (B == 0)) ? 0 : C;
>
>
> The whole point of the parenthesis was to associate.
>
> I usually explicitly associate precisely because of this!
>
> A + ((B == 0) ? 0 : C);
>
> In the ternary operator it should treat parenthesis directly to 
> the left as the argument.
>
> Of course, I doubt this will get fixed but it should be noted 
> so other don't step in the same poo.

In c++ the ternary operator is the second most lowest precedence 
operator, just above the comma.  You can see a table of each 
operator and their precendence here, I refer to it every so 
often: 
https://en.cppreference.com/w/cpp/language/operator_precedence

Learning that the ternary operator has such a low precedence is 
one of those things that all programmers eventually run 
into...welcome to the club :)

It looks like D has a similar table here 
(https://wiki.dlang.org/Operator_precedence).  However, it 
doesn't appear to have the ternary operator in there. On that 
note, D would take it's precedence order from C/C++ unless 
there's a VERY good reason to change it.


More information about the Digitalmars-d mailing list