https://issues.dlang.org/show_bug.cgi?id=18743

Patrick Schluter <[email protected]> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |[email protected].
                   |                            |eu

--- Comment #3 from Patrick Schluter <[email protected]> ---
(In reply to David Nadlinger from comment #1)
> This isn't a bug.
> 
> In D, ?: has higher precedence than =, so
> 
>     true ? stt = "AA" : stt = "BB"
> 
> means
> 
>     (true ? (stt = "AA") : stt) = "BB",
> 
> in line with C and other languages, but notably not C++.
> 
> The operator precedence should be documented somewhere, though; while there
> is a table in TDPL (p. 61 ff.) and on the Wiki
> (https://wiki.dlang.org/Operator_precedence), I can't seem to find it on
> dlang.org/spec.
> 
> ---
> 
> Changing this to an enhancement request, as we should really consider
> requiring explicit parenthesization for this sort of error-prone code,
> similar to how we disallow assignment expressions in if statements.

How on earth can 

    (true ? (stt = "AA") : stt) = "BB" 

compile?
(stt = "AA") is not a lvalue or is it?

It looks like D compiles 

    int a, b;
    (a=1)=2;

without problem. That's what surprizing here (at least for a C guy), not the
precedence of the ternary.

--

Reply via email to