- Title
- Initializing a std::initializer_list
- Status
- cd2
- Section
- 9.5.5 [dcl.init.list]
- Submitter
- James Widman
Created on 2009-04-08.00:00:00 last changed 199 months ago
Messages
Date: 2009-10-15.00:00:00
[Voted into WP at October, 2009 meeting.]
Date: 2009-07-15.00:00:00
Proposed resolution (July, 2009): Change 9.5.5 [dcl.init.list] paragraph 4 as follows:
When an initializer list is implicitly converted to a
An object of type std::initializer_list<E>
is constructed from an initializer list, the object
passed is constructed as if the implementation allocated an
array of N elements of type E , where N is the
number of elements in the initializer list. Each element of that array
is copy-initialized with the corresponding element of the
initializer list converted to E , and the
std::initializer_list<E> object is constructed to refer
to that array. If a narrowing conversion is required to convert
the element to E initialize any of the
elements, the program is ill-formed. [Example:...
Date: 2009-04-08.00:00:00
There are several problems with the wording of 9.5.5 [dcl.init.list] paragraph 4:
First, an initializer list is not an expression, so it is not
appropriate to refer to “implicitly convert[ing]” it,
as is done in the first sentence. Also, the conversion of the elements of the initializer list to the
elements of the array is not specified to be either
copy-initialization or direct-initialization. If this is intended to
be viewed as an aggregate initialization, it would be
copy-initialization, but that needs to be specified more clearly. Finally, the initializer list can have nested initializer lists, so
the references to converting the element also need to be cleaned
up.
When an initializer list is implicitly converted to a
std::initializer_list<E> , the object passed is
constructed as if the implementation allocated an array of N
elements of type E , where N is the number of elements
in the initializer list. Each element of that array is initialized
with the corresponding element of the initializer list converted to
E , and the std::initializer_list<E> object is
constructed to refer to that array. If a narrowing conversion is
required to convert the element to E , the program is
ill-formed.
| History | |||
|---|---|---|---|
| Date | User | Action | Args |
| 2010-03-29 00:00:00 | admin | set | status: dr -> cd2 |
| 2009-11-08 00:00:00 | admin | set | messages: + msg2463 |
| 2009-11-08 00:00:00 | admin | set | status: ready -> dr |
| 2009-08-03 00:00:00 | admin | set | messages: + msg2167 |
| 2009-08-03 00:00:00 | admin | set | status: open -> ready |
| 2009-04-08 00:00:00 | admin | create | |