<HTML>
<HEAD>
<meta http-equiv="Content-Type" content="text/html; charset=us-ascii">
<TITLE>
    CWG Issue 2058</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="2058"></A><H4>2058.
  
More errors from internal-linkage namespaces
</H4>
<B>Section: </B>6.7&#160; [<A href="https://wg21.link/basic.link">basic.link</A>]
 &#160;&#160;&#160;

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

 <B>Submitter: </B>Richard Smith
 &#160;&#160;&#160;

 <B>Date: </B>2014-12-15<BR>


<P>[Accepted at the November, 2020 meeting as part of paper P1787R6 and
moved to DR at the February, 2021 meeting.]</P>



<P>
<A HREF="1603.html">Issue 1603</A> dealt with omissions in the
application of the change to give unnamed namespaces internal linkage,
but its resolution overlooked a couple of items.  According to
6.7 [<A href="https://wg21.link/basic.link#6">basic.link</A>] paragraph 6,</P>

<BLOCKQUOTE>

The name of a function declared in block scope and the name
of a variable declared by a block scope extern declaration
have linkage. If there is a visible declaration of an entity
with linkage having the same name and type, ignoring
entities declared outside the innermost enclosing namespace
scope, the block scope declaration declares that same entity
and receives the linkage of the previous declaration. If
there is more than one such matching entity, the program is
ill-formed. Otherwise, if no matching entity is found, the
block scope entity receives external linkage.

</BLOCKQUOTE>

<P>The last sentence should say, &#8220;...receives the
linkage of the innermost enclosing namespace.&#8221;</P>

<P>Also, 6.7 [<A href="https://wg21.link/basic.link#8">basic.link</A>] paragraph 8 says,</P>

<BLOCKQUOTE>

<P>A type without linkage shall not be used as the type of a
variable or function with external linkage unless</P>

<UL>
<LI><P>...</P></LI>

<LI><P>the entity is declared within an unnamed namespace
(9.9.2 [<A href="https://wg21.link/namespace.def">namespace.def</A>]), or</P></LI>

<LI><P>...</P></LI>

</UL>

</BLOCKQUOTE>

<P>This bullet cannot occur, since a function or variable declared
within an unnamed namespace cannot have external linkage.</P>



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