https://issues.dlang.org/show_bug.cgi?id=23349
Issue ID: 23349
Summary: Disallow assignments in ?: expressions
Product: D
Version: D2
Hardware: All
OS: All
Status: NEW
Severity: enhancement
Priority: P1
Component: dmd
Assignee: [email protected]
Reporter: [email protected]
Currently, conditional expressions (the formal name for the tenery operator
`?:`) allow for an assignment in its then-part (between question mark and
colon), but not its else-part (after colon). There’s even an example in the
spec[1]:
test ? a = b : (c = 2);
This is something compilers would warn about, and here, D’s no-warning policy
is correct: Make it an error and require parentheses:
test ? (a = b) : (c = 2);
In the grammar, it is a simple change:
>From
ConditionalExpression:
OrOrExpression
OrOrExpression ? Expression : ConditionalExpression
to
ConditionalExpression:
OrOrExpression
OrOrExpression ? ConditionalExpression : ConditionalExpression
Note: The only Expressions below ConditionalExpression are CommaExpression and
AssignExpression.
[1]: https://dlang.org/spec/expression.html#conditional_expressions
--