Title
Value initialization of unions with member initializers
Status
cd3
Section
9.4 [dcl.init]
Submitter
Richard Smith

Created on 2012-05-06.00:00:00 last changed 90 months ago

Messages

Date: 2013-04-15.00:00:00

[Moved to DR at the April, 2013 meeting.]

Date: 2012-10-15.00:00:00

Proposed resolution (October, 2012):

Change 9.4 [dcl.init] paragraph 7 as follows:

To value-initialize an object of type T means:

  • ...

  • if T is a (possibly cv-qualified) non-union class type without a user-provided or deleted default constructor, then the object is zero-initialized and, if T has a non-trivial default constructor, default-initialized;

  • ...

Date: 2020-12-15.00:00:00

According to 9.4 [dcl.init] paragraph 7,

To value-initialize an object of type T means:

  • if T is a (possibly cv-qualified) class type (Clause Clause 11 [class]) with either no default constructor (11.4.5 [class.ctor]) or a default constructor that is user-provided or deleted, then the object is default-initialized;

  • if T is a (possibly cv-qualified) non-union class type without a user-provided or deleted default constructor, then the object is zero-initialized and, if T has a non-trivial default constructor, default-initialized;

  • if T is an array type, then each element is value-initialized;

  • otherwise, the object is zero-initialized.

In an example like

  union U { int a = 5; };
  int main() { return U().a; }

this means that the value returned is 0, because none of the first three bullets apply. Should the “non-union” restriction be dropped from the second bullet?

History
Date User Action Args
2014-03-03 00:00:00adminsetstatus: drwp -> cd3
2013-10-14 00:00:00adminsetstatus: dr -> drwp
2013-05-03 00:00:00adminsetmessages: + msg4407
2013-05-03 00:00:00adminsetstatus: ready -> dr
2012-11-03 00:00:00adminsetmessages: + msg4063
2012-11-03 00:00:00adminsetstatus: open -> ready
2012-05-06 00:00:00admincreate