Created on 2000-07-11.00:00:00 last changed 81 months ago
Notes from the August, 2011 meeting:
If the implicit default constructor initializes all subobjects, no initializer should be required.
Additional note (February, 2011):
This issue should be brought up again in light of constexpr constructors and non-static data member initializers.
[Adopted at the November, 2016 meeting as part of paper P0490R0.]
Paragraph 9 of 9.4 [dcl.init] says:
If no initializer is specified for an object, and the object is of (possibly cv-qualified) non-POD class type (or array thereof), the object shall be default-initialized; if the object is of const-qualified type, the underlying class type shall have a user-declared default constructor. Otherwise, if no initializer is specified for an object, the object and its subobjects, if any, have an indeterminate initial value; if the object or any of its subobjects are of const-qualified type, the program is ill-formed.
What if a const POD object has no non-static data members? This wording requires an empty initializer for such cases:
struct Z { // no data members operator int() const { return 0; } }; void f() { const Z z1; // ill-formed: no initializer const Z z2 = { }; // well-formed }
Similar comments apply to a non-POD const object, all of whose non-static data members and base class subobjects have default constructors. Why should the class of such an object be required to have a user-declared default constructor?
(See also issue 78.)
History | |||
---|---|---|---|
Date | User | Action | Args |
2018-02-27 00:00:00 | admin | set | status: drafting -> c++17 |
2011-09-06 00:00:00 | admin | set | messages: + msg3531 |
2011-09-06 00:00:00 | admin | set | status: open -> drafting |
2011-02-28 00:00:00 | admin | set | messages: + msg3251 |
2000-07-11 00:00:00 | admin | create |