This is an unofficial snapshot of the ISO/IEC JTC1 SC22 WG21 Core Issues List revision 110b. See http://www.open-std.org/jtc1/sc22/wg21/ for the official list.

2023-01-15


90. Should the enclosing class be an "associated class" too?

Section: 6.5.4  [basic.lookup.argdep]     Status: TC1     Submitter: John Spicer     Date: 2 Feb 1999

Section 6.5.4 [basic.lookup.argdep] includes the following:

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:

(This proposal also addresses Core issue 91.)