Home | History | Annotate | Download | only in basic.lookup.elab
      1 // RUN: %clang_cc1 -fsyntax-only -verify %s
      2 
      3 namespace test0 {
      4   struct A {
      5     static int foo;
      6   };
      7 
      8   namespace i0 {
      9     typedef int A; // expected-note {{declared here}}
     10 
     11     int test() {
     12       struct A a; // expected-error {{elaborated type refers to a typedef}}
     13       return a.foo;
     14     }
     15   }
     16 
     17   namespace i1 {
     18     template <class> class A; // expected-note {{declared here}}
     19 
     20     int test() {
     21       struct A a; // expected-error {{elaborated type refers to a template}}
     22       return a.foo;
     23     }
     24   }
     25 
     26   namespace i2 {
     27     int A;
     28 
     29     int test() {
     30       struct A a;
     31       return a.foo;
     32     }
     33   }
     34 
     35   namespace i3 {
     36     void A();
     37 
     38     int test() {
     39       struct A a;
     40       return a.foo;
     41     }
     42   }
     43 
     44   namespace i4 {
     45     template <class T> void A();
     46 
     47     int test() {
     48       struct A a;
     49       return a.foo;
     50     }
     51   }
     52 
     53   // This should magically be okay;  see comment in SemaDecl.cpp.
     54   // rdar://problem/7898108
     55   typedef struct A A;
     56   int test() {
     57     struct A a;
     58     return a.foo;
     59   }
     60 }
     61