<HTML>
<HEAD>
<meta http-equiv="Content-Type" content="text/html; charset=us-ascii">
<TITLE>
    CWG Issue 77</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="77"></A><H4>77.
  
The definition of friend does not allow nested classes to be friends
</H4>
<B>Section: </B>11.8.4&#160; [<A href="https://wg21.link/class.friend">class.friend</A>]
 &#160;&#160;&#160;

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

 <B>Submitter: </B>Judy Ward
 &#160;&#160;&#160;

 <B>Date: </B>15 Dec 1998<BR>



<P>[Moved to DR at 4/02 meeting.]</P>

<P>The definition of "friend" in
11.8.4 [<A href="https://wg21.link/class.friend">class.friend</A>]

says:</P>
<BLOCKQUOTE>A friend of a class is a function or class that is not a member
of the class but is permitted to use the private and protected member names
from the class. ...</BLOCKQUOTE>
A nested class, i.e. INNER in the example below, is a member of class OUTER.
The sentence above states that it cannot be a friend. I think this is a
mistake.
<PRE>
    class OUTER {
        class INNER;
        friend class INNER;
        class INNER {};
    };
</PRE>

<P><B>Proposed resolution (04/01):</B></P>

<P>Change the first sentence of 11.8.4 [<A href="https://wg21.link/class.friend">class.friend</A>]
as follows:</P>

<BLOCKQUOTE>

A friend of a class is a function or class that is <DEL>not a
member of the class but is allowed</DEL> <INS>given permission</INS>
to use the private and protected member names from the class.
<DEL>The name of a friend is not in the scope of the class, and
the friend is not called with the member access operators
(7.6.1.5 [<A href="https://wg21.link/expr.ref">expr.ref</A>]) unless it is a member of
another class.</DEL> <INS>A class specifies its friends, if any,
by way of friend declarations.  Such declarations give special
access rights to the friends, but they do not make the nominated
friends members of the befriending class.</INS>

</BLOCKQUOTE>

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