On Tuesday, 7 August 2018 at 19:58:40 UTC, Steven Schveighoffer
wrote:
On 8/7/18 3:18 PM, JN wrote:
[...]
But operator precedence says that this is really:
b = (a = (3 ? 4 : 5))
It's a different thing than the if statement. In the if
statement, it's the *assignment* that is now the condition.
Here, it is not an assignment that is the condition, but `3`.
There is no common error that requires preventing assignment
from the result of an assignment.
I realize that what you seeing is a typo from:
b = a == 3 ? 4 : 5
but the problem is that you are relying on precedence
incorrectly here. If you type:
b = (a = 3) ? 4 : 5
Then you get the error. D can't solve all the problems. Best
thing to do is to use parentheses to clarify what you want for
your condition rather than rely on default order of operations.
-Steve
Ahhhh. I didn't think of that. Hmm, I guess a warning here would
be nice then, or perhaps DScanner could mark such cases as
suspicious :)