| // RUN: %clang_cc1 -std=c++11 -verify %s |
| |
| namespace PR40329 { |
| struct A { |
| A(int); |
| friend int operator->*(A, A); |
| }; |
| struct B : A { |
| B(); |
| enum E { e }; |
| }; |
| // Associated classes for B are {B, A} |
| // Associated classes for B::E are {B} (non-transitive in this case) |
| // |
| // If we search B::E first, we must not mark B "visited" and shortcircuit |
| // visiting it later, or we won't find the associated class A. |
| int k0 = B::e ->* B::e; // expected-error {{non-pointer-to-member type}} |
| int k1 = B::e ->* B(); |
| int k2 = B() ->* B::e; |
| } |