This is an unofficial snapshot of the ISO/IEC JTC1 SC22 WG21 Core Issues List revision 115d. See http://www.open-std.org/jtc1/sc22/wg21/ for the official list.
2024-10-26
[Moved to DR at the April, 2013 meeting.]
According to 7.6.19 [expr.ass] paragraph 9,
A braced-init-list may appear on the right-hand side of
an assignment to a scalar...
an assignment defined by a user-defined assignment operator, in which case the initializer list is passed as the argument to the operator function.
Presumably the phrase “user-defined” is not intended to forbid an example like
struct A { A(); A ( std::initializer_list<int> ) ; }; void f() { A a; a = {37}; }
which relies on an implicitly-declared assignment operator.
Proposed resolution (August, 2012):
Change 7.6.19 [expr.ass] paragraph 9 as follows:
A braced-init-list may appear on the right-hand side of
an assignment to a scalar, in which case the initializer list shall have at most a single element. The meaning of x={v}, where T is the scalar type of the expression x, is that of x=T(v) except that no narrowing conversion (8.5.4) is allowed. The meaning of x={} is x=T().
an assignment
defined by a user-defined assignment operatorto an object of class type, in which case the initializer list is passed as the argument to the assignment operator function selected by overload resolution (12.4.3.2 [over.ass], 12.2 [over.match]).