<HTML>
<HEAD>
<meta http-equiv="Content-Type" content="text/html; charset=us-ascii">
<TITLE>
    CWG Issue 113</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="113"></A><H4>113.
  
Visibility of called function
</H4>
<B>Section: </B>7.6.1.3&#160; [<A href="https://wg21.link/expr.call">expr.call</A>]
 &#160;&#160;&#160;

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

 <B>Submitter: </B>Christophe de Dinechin
 &#160;&#160;&#160;

 <B>Date: </B>5 May 1999<BR>



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



<P>
<B>Christophe de Dinechin:</B>
In 7.6.1.3 [<A href="https://wg21.link/expr.call">expr.call</A>]
, paragraph 2 reads:</P>

<BLOCKQUOTE>
If no declaration of the called function is visible from the scope  of
the call the program is ill-formed.
</BLOCKQUOTE>

I think nothing there or in the previous paragraph indicates that
this does not apply to calls through pointer or virtual calls.

<P>
<B>Mike Miller:</B>
"The called function" is unfortunate phraseology; it makes it
sound as if it's referring to the function actually called, as
opposed to the identifier in the postfix expression.  It's
wrong with respect to Koenig lookup, too (the declaration need
not be visible if it can be found in a class or namespace
associated with one or more of the arguments).</P>

<P>In fact, this paragraph should be a note.  There's a general
rule that says you have to find an unambiguous declaration of
any name that is used
(6.5 [<A href="https://wg21.link/basic.lookup#1">basic.lookup</A>] paragraph 1)
;
the only reason this paragraph
is here is to contrast with C's implicit declaration of called
functions.</P>

<P><B>Proposed resolution:</B></P>
Change section 7.6.1.3 [<A href="https://wg21.link/expr.call#2">expr.call</A>] paragraph 2 from:
<BLOCKQUOTE>If no declaration of the called function is visible from the
scope of the call the program is ill-formed.</BLOCKQUOTE>
to:
<BLOCKQUOTE>[<I>Note:</I> if a function or member function name is used,
and name lookup (6.5 [<A href="https://wg21.link/basic.lookup">basic.lookup</A>]) does not find a
declaration of that name,
the program is ill-formed. No function is implicitly declared by such
a call. ]</BLOCKQUOTE>

<P>(See also <A HREF="218.html">issue 218</A>.)</P>

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