On Saturday, 7 April 2018 at 09:56:43 UTC, Jonathan M Davis wrote:
         true?stt="AA":stt="BB";    <<<<-----///Out:BB

[...]

Assignment takes precendence over the ternary operator.

That's not true. Not in D and not in C/C++
https://wiki.dlang.org/Operator_precedence
http://en.cppreference.com/w/c/language/operator_precedence#cite_note-2

So, no, I don't think that it is. Putting parens around the assignment expressions makes it print AA.

It should not matter if there are parens around the assignment.

As it stands, it evaluates both assignment expressions before evaluating the ternary operator.

That is not true in C/C++, let me quote from a C standard (draft), § 6.1.5 conditional operator:

[this is about <first op> ? <second op> : <third op>]

"Semantics

The first operand is evaluated; there is a sequence point between its evaluation and the evaluation of the second or third operand (whichever is evaluated). The second operand is evaluated only if the first compares unequal to 0; the third operand is evaluated only if the first compares equal to 0; the result is the value of the second or third operand (whichever is evaluated), converted to the type described below.110)"

According to

https://dlang.org/spec/expression.html#conditional_expressions

the same shall be valid for D. Hence when

   true ? s = A : s = B;

or

   true ? (s = A) : (s = B);

does not yield A for s it's a bug.

Reply via email to