Created on 2012-08-21.00:00:00 last changed 146 months ago
Notes from the October, 2012 meeting:
The incorrect description of the meaning of a compound assignment with a braced-init-list should be fixed by CWG. The question of whether it makes sense to apply narrowing rules to such assignments is better addressed by EWG.
See also issue 2399.
The specification of 7.6.19 [expr.ass] paragraph 9 is presumably intended to allow use of a braced-init-list as the operand of a compound assignment operator as well as a simple assignment operator, although the normative wording does not explicitly say so. (The example in that paragraph does include
complex<double> z;
z += { 1, 2 }; // meaning z.operator+=({1,2})
for instance, which could be read to imply compound assignment operators for scalar types as well.)
However, the details of how this is to be implemented are not clear. Paragraph 7 says,
The behavior of an expression of the form E1 op = E2 is equivalent to E1 = E1 op E2 except that E1 is evaluated only once.
Applying this pattern literally to a braced-init-list yields invalid code: x += {1} would become x = x + {1}, which is non-syntactic.
Another problem is how to apply the prohibition against narrowing conversions to a compound assignment. For example,
char c; c += {1};
would presumably always be a narrowing error, because after integral promotions, the type of c+1 is int. The similar issue 1078 was classified as "NAD" because the workaround was simply to add a cast to suppress the error; however, there is no place to put a similar cast in a compound assignment.
History | |||
---|---|---|---|
Date | User | Action | Args |
2012-11-03 00:00:00 | admin | set | messages: + msg4093 |
2012-11-03 00:00:00 | admin | set | status: open -> drafting |
2012-08-21 00:00:00 | admin | create |