- Title
- Should the enclosing class be an "associated class" too?
- Status
- tc1
- Section
- 6.5.4 [basic.lookup.argdep]
- Submitter
- John Spicer
Created on 1999-02-02.00:00:00
last changed 262 months ago
Messages
Date: 1999-10-15.00:00:00
Proposed Resolution (10/99):
Change the two referenced bullets to read:
- If T is a class type (including unions),
its associated classes are:
the class itself; the
class of which it is a member, if any; and its direct and indirect base
classes. Its associated namespaces are the namespaces in which its
associated classes are defined.
- If T is an enumeration type,
its associated namespace is the namespace in
which it is defined. If it is class member, its associated class is the
member's class; else it has no associated class.
(This proposal also addresses
Core issue 91.)
Date: 2022-11-20.07:54:16
Section
6.5.4 [basic.lookup.argdep]
includes the following:
-
If T is a class type, its associated classes are the class itself and its
direct and indirect base classes. Its associated namespaces are the namespaces
in which its associated classes are defined.
-
If T is a union or enumeration type, its associated namespace is the namespace
in which it is defined. If it is a class member, its associated class is
the member's class; else it has no associated class.
Note that for a union, the enclosing class is an "associated class", but
for a class type the enclosing class is not an "associated class". This
results in some surprising behavior, as shown in the example below.
struct A {
union U {};
friend void f(U);
};
struct B {
struct S {};
friend void f(S);
};
int main() {
A::U u;
f(u); // okay: A is an associated class
B::S s;
f(s); // error: no matching f(), B is not an associated class
}
Certainly the enclosing class should also be an associated class for nested
class types, shouldn't it?
Proposed Resolution (10/99):
Change the two referenced bullets to read:
- If T is a class type (including unions),
its associated classes are:
the class itself; the
class of which it is a member, if any; and its direct and indirect base
classes. Its associated namespaces are the namespaces in which its
associated classes are defined.
- If T is an enumeration type,
its associated namespace is the namespace in
which it is defined. If it is class member, its associated class is the
member's class; else it has no associated class.
(This proposal also addresses
Core issue 91.)
|
Date |
User |
Action |
Args |
2003-04-25 00:00:00 | admin | set | status: dr -> tc1 |
2000-02-23 00:00:00 | admin | set | messages:
+ msg296 |
2000-02-23 00:00:00 | admin | set | status: review -> dr |
1999-02-02 00:00:00 | admin | create | |