<HTML>
<HEAD>
<meta http-equiv="Content-Type" content="text/html; charset=us-ascii">
<TITLE>
    CWG Issue 2072</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="2072"></A><H4>2072.
  
Default argument instantiation for member functions of templates
</H4>
<B>Section: </B>13.9.2&#160; [<A href="https://wg21.link/temp.inst">temp.inst</A>]
 &#160;&#160;&#160;

 <B>Status: </B>C++23
 &#160;&#160;&#160;

 <B>Submitter: </B>Maxim Kartashev
 &#160;&#160;&#160;

 <B>Date: </B>2015-01-19<BR>


<P>[Accepted as a DR at the February, 2023 meeting.]</P>



<P>Default argument instantiation is described in
13.9.2 [<A href="https://wg21.link/temp.inst#12">temp.inst</A>] paragraph 12, and although instantiation
of default arguments for member functions of class templates is
mentioned elsewhere a number of times, this paragraph only describes
default argument instantiation for function templates.</P>

<P><B>Proposed resolution (approved by CWG 2023-02-06):</B></P>

<P>Change in 13.9.2 [<A href="https://wg21.link/temp.inst#12">temp.inst</A>] paragraph 12 as follows:</P>

<BLOCKQUOTE>

If a <INS>templated</INS> function <DEL>template</DEL>
f is called in a way that requires a default
argument to be used, the dependent names are looked up, the semantics
constraints are checked, and the instantiation of any template used in
the default argument is done as if the default argument had been an
initializer used in a function template specialization with the same
scope, the same template parameters and the same access as that of the
function template f used at that point, except that the scope in which
a closure type is declared (7.5.6.2 [<A href="https://wg21.link/expr.prim.lambda.closure">expr.prim.lambda.closure</A>]) --- and
therefore its associated namespaces --- remain as determined from the
context of the definition for the default argument.  This analysis is
called default argument instantiation. The instantiated default
argument is then used as the argument of f.

</BLOCKQUOTE>

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