This is an unofficial snapshot of the ISO/IEC JTC1 SC22 WG21 Core Issues List revision 117b. See http://www.open-std.org/jtc1/sc22/wg21/ for the official list.
2025-08-11
2272. Implicit initialization of aggregate members of reference typeSection: 9.5.2 [dcl.init.aggr] Status: C++17 Submitter: Vinny Romano Date: 2016-06-10[Adopted at the February/March, 2017 meeting.]
Consider:
struct S { const int &i; } s{};
This example ought to be ill-formed, but 9.5.2 [dcl.init.aggr] paragraph 8 states that i is instead initialized from an empty initializer list, which causes i to bind to a value-initialized temporary of type int.
Proposed resolution (February, 2017):
Change 9.5.2 [dcl.init.aggr] paragraph 8 as follows:
If there are fewer initializer-clauses in the list than there are elements in the a non-union aggregate, then each element not explicitly initialized shall be initialized from its default member initializer (11.4 [class.mem]) or, if there is no default member initializer, from an empty initializer list (9.5.5 [dcl.init.list]). is initialized as follows:
If the element has a default member initializer (11.4 [class.mem]), the element is initialized from that initializer.
Otherwise, if the element is not a reference, the element is copy-initialized from an empty initializer list (9.5.5 [dcl.init.list]).
Otherwise, the program is ill-formed.
If the aggregate is a union and the initializer list is empty, then
if any variant member has a default member initializer, that member is initialized from its default member initializer;
otherwise, the first member of the union (if any) is copy-initialized from an empty initializer list.
[Example:...
Delete 9.5.2 [dcl.init.aggr] paragraph 11:
If an incomplete or empty initializer-list leaves a member of reference type uninitialized, the program is ill-formed.
This resolution also resolves issues 1622 and 2116.
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4