<HTML>
<HEAD>
<meta http-equiv="Content-Type" content="text/html; charset=us-ascii">
<TITLE>
    CWG Issue 2009</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="2009"></A><H4>2009.
  
Unclear specification of class scope
</H4>
<B>Section: </B>6.4.7&#160; [<A href="https://wg21.link/basic.scope.class">basic.scope.class</A>]
 &#160;&#160;&#160;

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

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

 <B>Date: </B>2014-09-23<BR>


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



<P>Point 2 of the rules of class scope in 6.4.7 [<A href="https://wg21.link/basic.scope.class#1">basic.scope.class</A>] paragraph 1
says,</P>

<BLOCKQUOTE>

A name <TT>N</TT> used in a class <TT>S</TT> shall refer to
the same declaration in its context and when re-evaluated in
the completed scope of <TT>S</TT>. No diagnostic is required
for a violation of this rule.

</BLOCKQUOTE>

<P>It is not clear that this provision does not apply to
names appearing in function bodies, default arguments,
<I>exception-specification</I>s, and
<I>brace-or-equal-initializer</I>s.  It is also not clear
what it means to &#8220;re-evaluate&#8221; a name.</P>

<P>One possible approach to this problem would be to say
that all names declared in a class are visible throughout
the class and simply make it ill-formed to refer to a
name that has not been declared yet in the contexts in
which that is problematic, such as types and template
arguments.</P>

<P>In addition, the fourth point says,</P>

<BLOCKQUOTE>

A name declared within a member function hides a declaration
of the same name whose scope extends to or past the end of
the member function's class.

</BLOCKQUOTE>

<P>This rule is unneeded, as it simply restates the normal
hiding rule in _N4868_.6.4.1 [<A href="https://wg21.link/basic.scope.declarative#1">basic.scope.declarative</A>] paragraph 1:</P>

<BLOCKQUOTE>

The scope of a declaration is the same as its potential
scope unless the potential scope contains another
declaration of the same name. In that case, the potential
scope of the declaration in the inner (contained)
declarative region is excluded from the scope of the
declaration

</BLOCKQUOTE>

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