Title
Value-initialization and default constructors
Status
open
Section
9.4.1 [dcl.init.general]
Submitter
Shafik Yaghmour

Created on 2023-10-31.00:00:00 last changed 1 month ago

Messages

Date: 2023-10-31.00:00:00

Subclause 9.4.1 [dcl.init.general] paragraph 9 specifies:

To value-initialize an object of type T means:
  • if T is a (possibly cv-qualified) class type (Clause Clause 11 [class]), then
    • if T has either no default constructor (11.4.5.2 [class.default.ctor]) or a default constructor that is user-provided or deleted, then the object is default-initialized;
    • otherwise, the object is zero-initialized and the semantic constraints for default-initialization are checked, and if T has a non-trivial default constructor, the object is default-initialized;
  • if T is an array type, ...

The specification about checking the semantic constraints and invoking only non-trivial default constructors is overly convoluted. Omitting a call to a trivial constructor is an as-if optimization that should not be prescribed by the standard.

Possible resolution:

Change in 9.4.1 [dcl.init.general] bullet 9.1.2 as follows:

  • ...
  • otherwise, the object is zero-initialized and the semantic constraints for default-initialization are checked, and if T has a non-trivial default constructor, the object is then default-initialized;
History
Date User Action Args
2023-10-31 00:00:00admincreate