<HTML>
<HEAD>
<meta http-equiv="Content-Type" content="text/html; charset=us-ascii">
<TITLE>
    CWG Issue 201</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="201"></A><H4>201.
  
Order of destruction of temporaries in initializers
</H4>
<B>Section: </B>6.8.7&#160; [<A href="https://wg21.link/class.temporary">class.temporary</A>]
 &#160;&#160;&#160;

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

 <B>Submitter: </B>Alan Nash
 &#160;&#160;&#160;

 <B>Date: </B>31 Jan 2000<BR>



<P>[Moved to DR at 4/01 meeting.]</P>



<P>According to 6.8.7 [<A href="https://wg21.link/class.temporary">class.temporary</A>]

paragraph 4, an expression appearing as the initializer in an object
definition constitutes a context "in which temporaries are destroyed
at a different point than the end of the full-expression."  It goes on
to say that the temporary containing the value of the expression
persists until after the initialization is complete (see also
<A HREF="117.html">issue 117</A>).  This seems to presume
that the end of the full-expression is a point earlier than the
completion of the initialization.</P>

<P>However, according to
6.10.1 [<A href="https://wg21.link/intro.execution">intro.execution</A>]
paragraphs 12-13, the
full-expression in such cases is, in fact, the entire initialization.
If this is the case, the behavior described for temporaries in an
initializer expression is simply the normal behavior of temporaries in
any expression, and treating it as an exception to the general rule is
both incorrect and confusing.</P>

<P><B>Proposed resolution (04/01):</B></P>

<P><I>[Note: this proposal also addresses <A HREF="124.html">issue 124</A>.]</I></P>

<OL>

<LI>
<P>Add to the end of 6.10.1 [<A href="https://wg21.link/intro.execution#12">intro.execution</A>] paragraph 12:</P>

<BLOCKQUOTE>

If the initializer for an object or
sub-object is a full-expression, the initialization of
the object or sub-object (e.g., by calling a constructor
or copying an expression value) is considered to be part
of the full-expression.

</BLOCKQUOTE>
</LI>

<LI>
<P>Replace 6.8.7 [<A href="https://wg21.link/class.temporary#4">class.temporary</A>] paragraph 4 with:</P>

<BLOCKQUOTE>

There are two contexts in which temporaries are
destroyed at a different point than the end of the
full-expression.  The first context is when a
default constructor is called to initialize an
element of an array.  If the constructor has one
or more default arguments, any temporaries created
in the default argument expressions are destroyed
immediately after return from the constructor.

</BLOCKQUOTE>
</LI>

</OL>

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