<HTML>
<HEAD>
<meta http-equiv="Content-Type" content="text/html; charset=us-ascii">
<TITLE>
    CWG Issue 1818</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="1818"></A><H4>1818.
  
Visibility and inherited language linkage
</H4>
<B>Section: </B>9.12&#160; [<A href="https://wg21.link/dcl.link">dcl.link</A>]
 &#160;&#160;&#160;

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

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

 <B>Date: </B>2013-12-04<BR>


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



<P>Does the language linkage of a block-scope declaration determine
the language linkage of a subsequent declaration of the same name in
a different scope?  For example,</P>

<PRE>
   extern "C" void f() {
     void g();    //<SPAN CLASS="cmnt"> Implicitly </SPAN>extern "C"
   }
   void g() { }   //<SPAN CLASS="cmnt"> Also </SPAN>extern "C"<SPAN CLASS="cmnt"> or linkage mismatch?</SPAN>
</PRE>

<P>In other contexts, inheritance of linkage requires that the earlier
declaration be visible, as in 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 <TT>extern</TT> 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.

</BLOCKQUOTE>

<P>The specification for language linkage in
9.12 [<A href="https://wg21.link/dcl.link#5">dcl.link</A>] paragraph 5, however, makes no
mention of visibility:</P>

<BLOCKQUOTE>

A function can be declared without a linkage specification
after an explicit linkage specification has been seen; the
linkage explicitly specified in the earlier declaration is
not affected by such a function declaration.

</BLOCKQUOTE>

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