<HTML>
<HEAD>
<meta http-equiv="Content-Type" content="text/html; charset=us-ascii">
<TITLE>
    CWG Issue 141</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="141"></A><H4>141.
  
Non-member function templates in member access expressions
</H4>
<B>Section: </B>_N4868_.6.5.6&#160; [<A href="https://wg21.link/basic.lookup.classref">basic.lookup.classref</A>]
 &#160;&#160;&#160;

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

 <B>Submitter: </B>fvali
 &#160;&#160;&#160;

 <B>Date: </B>31 July 1999<BR>



<P>[Voted into the WP at the June, 2008 meeting.]</P>

<P>_N4868_.6.5.6 [<A href="https://wg21.link/basic.lookup.classref#1">basic.lookup.classref</A>] paragraph 1
says,</P>

<BLOCKQUOTE>
In a class member access expression
(7.6.1.5 [<A href="https://wg21.link/expr.ref">expr.ref</A>]
), if the <TT>.</TT> or
<TT>-&gt;</TT> token is immediately followed by an <I>identifier</I>
followed by a <TT>&lt;</TT>, the identifier must be looked up to
determine whether the <TT>&lt;</TT> is the beginning of a template
argument list
(13.3 [<A href="https://wg21.link/temp.names">temp.names</A>]
) or a less-than
operator.  The identifier is first looked up in the class of the
object expression.  If the identifier is not found, it is then looked
up in the context of the entire <I>postfix-expression</I> and shall
name a class or function template.
</BLOCKQUOTE>

<P>There do not seem to be any circumstances in which use of a
non-member template function would be well-formed as the
<I>id-expression</I> of a class member access expression.</P>

<P><B>Proposed Resolution (November, 2006):</B></P>

<P>Change _N4868_.6.5.6 [<A href="https://wg21.link/basic.lookup.classref#1">basic.lookup.classref</A>] paragraph 1 as follows:</P>

<BLOCKQUOTE>

In a class member access expression (7.6.1.5 [<A href="https://wg21.link/expr.ref">expr.ref</A>]), if
the <TT>.</TT> or <TT>-&gt;</TT> token is immediately followed by an
identifier followed by a <TT>&lt;</TT>, the identifier must be looked
up to determine whether the <TT>&lt;</TT> is the beginning of a
template argument list (13.3 [<A href="https://wg21.link/temp.names">temp.names</A>]) or a less-than
operator. The identifier is first looked up in the class of the object
expression. If the identifier is not found, it is then looked up in
the context of the entire <I>postfix-expression</I> and shall name a
class <DEL>or function</DEL> template...

</BLOCKQUOTE>

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