<HTML>
<HEAD>
<meta http-equiv="Content-Type" content="text/html; charset=us-ascii">
<TITLE>
    CWG Issue 542</TITLE>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<STYLE TYPE="text/css">
  INS { text-decoration:none; font-weight:bold; background-color:#A0FFA0 }
  .INS { text-decoration:none; background-color:#D0FFD0 }
  DEL { text-decoration:line-through; background-color:#FFA0A0 }
  .DEL { text-decoration:line-through; background-color: #FFD0D0 }
  @media (prefers-color-scheme: dark) {
    HTML { background-color:#202020; color:#f0f0f0; }
    A { color:#5bc0ff; }
    A:visited { color:#c6a8ff; }
    A:hover, a:focus { color:#afd7ff; }
    INS { background-color:#033a16; color:#aff5b4; }
    .INS { background-color: #033a16; }
    DEL { background-color:#67060c; color:#ffdcd7; }
    .DEL { background-color:#67060c; }
  }
  SPAN.cmnt { font-family:Times; font-style:italic }
</STYLE>
</HEAD>
<BODY>
<P><EM>This is an unofficial snapshot of the ISO/IEC JTC1 SC22 WG21
  Core Issues List revision 118b.
  See http://www.open-std.org/jtc1/sc22/wg21/ for the official
  list.</EM></P>
<P>2025-09-28</P>
<HR>
<A NAME="542"></A><H4>542.
  
Value initialization of arrays of POD-structs
</H4>
<B>Section: </B>11.9&#160; [<A href="https://wg21.link/class.init">class.init</A>]
 &#160;&#160;&#160;

 <B>Status: </B>CD2
 &#160;&#160;&#160;

 <B>Submitter: </B>Alisdair Meredith
 &#160;&#160;&#160;

 <B>Date: </B>27 October 2005<BR>


<P>[Voted into the WP at the March, 2009 meeting.]</P>

<P>11.9 [<A href="https://wg21.link/class.init#2">class.init</A>] paragraph 2 says,</P>

<BLOCKQUOTE>

When an array of class objects is initialized (either explicitly or
implicitly), the constructor shall be called for each element of the
array, following the subscript order;

</BLOCKQUOTE>

<P>That implies that, given</P>

<PRE>
    struct POD {
      int x;
    };

    POD data[10] = {};
</PRE>

<P>this should call the implicitly declared default ctor 10 times,
leaving 10 uninitialized ints, rather than value initialize each
member of data, resulting in 10 initialized ints (which is required
by 9.5.2 [<A href="https://wg21.link/dcl.init.aggr#7">dcl.init.aggr</A>] paragraph 7).</P>

<P>I suggest rephrasing along the lines:</P>

<BLOCKQUOTE>

When an array is initialized (either explicitly or implicitly), each
element of the array shall be initialized in turn, following the
subscript order;

</BLOCKQUOTE>

<P>This would allow for PODs and other classes with a dual nature under
value/default initialization, and cover copy initialization for arrays
too.</P>

<P><B>Proposed resolution (October, 2006):</B></P>

<P>Change 11.9 [<A href="https://wg21.link/class.init#3">class.init</A>] paragraph 3 as follows:</P>

<BLOCKQUOTE>

When an array of class objects is initialized (either explicitly or
implicitly) <INS>and the elements are initialized by constructor</INS>,
the constructor shall be called for each element of the array,
following the subscript order; see 9.3.4.5 [<A href="https://wg21.link/dcl.array">dcl.array</A>].

</BLOCKQUOTE>

<BR><BR>
</BODY>
</HTML>
