<HTML>
<HEAD>
<meta http-equiv="Content-Type" content="text/html; charset=us-ascii">
<TITLE>
    CWG Issue 765</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="765"></A><H4>765.
  
Local types in inline functions with external linkage
</H4>
<B>Section: </B>9.2.3&#160; [<A href="https://wg21.link/dcl.fct.spec">dcl.fct.spec</A>]
 &#160;&#160;&#160;

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

 <B>Submitter: </B>Mike Miller
 &#160;&#160;&#160;

 <B>Date: </B>6 February, 2009<BR>


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

<P>9.2.3 [<A href="https://wg21.link/dcl.fct.spec#4">dcl.fct.spec</A>] paragraph 4 specifies that local static
variables and string literals appearing in the body of an inline
function with external linkage must be the same entities in every
translation unit in the program.  Nothing is said, however, about
whether local types are likewise required to be the same.</P>

<P>Although a conforming program could always have determined this
by use of <TT>typeid</TT>, recent changes to C++ (allowing local types
as template type arguments, lambda expression closure classes) make this
question more pressing.
</P>

<P><B>Notes from the July, 2009 meeting:</B></P>

<P>The types are intended to be the same.</P>

<P><B>Proposed resolution (November, 2009):</B></P>

<P>Change 9.2.3 [<A href="https://wg21.link/dcl.fct.spec#4">dcl.fct.spec</A>] paragraph 4 as follows:</P>

<BLOCKQUOTE>

...A <TT>static</TT> local variable in an <TT>extern inline</TT>
function always refers to the same object.  A string literal in the
body of an <TT>extern inline</TT> function is the same object in
different translation units.  [<I>Note:</I> A string literal
appearing in a default argument expression is not in the body of an
inline function merely because the expression is used in a function
call from that inline function. &#8212;<I>end note</I>] <INS>A type
defined within the body of an <TT>extern inline</TT> function is the
same type in every translation unit.</INS>

</BLOCKQUOTE>

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