that is bug?

kdevel kdevel at vogtner.de
Sat Apr 7 14:28:05 UTC 2018


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.


More information about the Digitalmars-d mailing list