| // RUN: %clang_cc1 -fsyntax-only -verify %s | 
 |  | 
 | class X{ | 
 | public: | 
 |   enum E {Enumerator}; | 
 |   int f(); | 
 |   static int mem; | 
 |   static float g(); | 
 | }; | 
 |  | 
 | void test(X* xp, X x) { | 
 |   int i1 = x.f(); | 
 |   int i2 = xp->f(); | 
 |   x.E; // expected-error{{cannot refer to type member 'E' with '.'}} | 
 |   xp->E; // expected-error{{cannot refer to type member 'E' with '->'}} | 
 |   int i3 = x.Enumerator; | 
 |   int i4 = xp->Enumerator; | 
 |   x.mem = 1; | 
 |   xp->mem = 2; | 
 |   float f1 = x.g(); | 
 |   float f2 = xp->g(); | 
 | } | 
 |  | 
 | struct A { | 
 |  int f0; | 
 | }; | 
 | struct B { | 
 |  A *f0(); | 
 | }; | 
 | int f0(B *b) { | 
 |   return b->f0->f0; // expected-error{{perhaps you meant to call this function}} | 
 | } | 
 |  | 
 | int i; | 
 |  | 
 | namespace C { | 
 |   int i; | 
 | } | 
 |  | 
 | void test2(X *xp) { | 
 |   xp->::i = 7; // expected-error{{qualified member access refers to a member in the global namespace}} | 
 |   xp->C::i = 7; // expected-error{{qualified member access refers to a member in namespace 'C'}} | 
 | } | 
 |  | 
 |  | 
 | namespace test3 { | 
 |   struct NamespaceDecl; | 
 |  | 
 |   struct NamedDecl { | 
 |     void *getIdentifier() const; | 
 |   }; | 
 |  | 
 |   struct NamespaceDecl : NamedDecl { | 
 |     bool isAnonymousNamespace() const { | 
 |       return !getIdentifier(); | 
 |     } | 
 |   }; | 
 | } |