This is an unofficial snapshot of the ISO/IEC JTC1 SC22 WG21 Core Issues List revision 116a. See http://www.open-std.org/jtc1/sc22/wg21/ for the official list.

2024-12-19


2196. Zero-initialization with virtual base classes

Section: 9.4  [dcl.init]     Status: C++17     Submitter: Richard Smith     Date: 2015-11-06

[Adopted at the February/March, 2017 meeting.]

Consider:

  struct V { int n; };
  struct A : virtual V {};
  struct B : A {
   B() : V{123}, A() {}
  } b;

Initialization of b first performs aggregate initialization of the V virtual base subobject. Then it performs value initialization of the A base subobject. Per 9.4.1 [dcl.init.general] bullet 9.1.2, the A base subobject is zero-initialized. Per 9.4.1 [dcl.init.general] bullet 6.2, this zero-initializes the V virtual base subobject.

Result: b.n is required to be 0, not 123.

Proposed resolution (November, 2016):

Change 9.4 [dcl.init] bullet 6.2 as follows:

To zero-initialize an object or reference of type T means: