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