Home | History | Annotate | Download | only in class.mem
      1 // RUN: %clang_cc1 -fsyntax-only -verify %s
      2 
      3 struct S
      4 {
      5   static int v1; // expected-note{{previous declaration is here}}
      6   int v1; //expected-error{{duplicate member 'v1'}}
      7   int v;  //expected-note 2{{previous definition is here}} \
      8           // expected-note{{previous declaration is here}}
      9   static int v; //expected-error{{redefinition of 'v' as different kind of symbol}}
     10   int v; //expected-error{{duplicate member 'v'}}
     11   static int v; //expected-error{{redefinition of 'v' as different kind of symbol}}
     12   enum EnumT { E = 10 };
     13   friend struct M;
     14   struct X;  //expected-note{{forward declaration of 'S::X'}}
     15   friend struct X;
     16 };
     17 
     18 S::EnumT Evar = S::E; // ok
     19 S::EnumT Evar2 = EnumT(); //expected-error{{use of undeclared identifier 'EnumT'}}
     20 S::M m; //expected-error{{no type named 'M' in 'S'}}
     21 S::X x; //expected-error{{variable has incomplete type 'S::X'}}
     22 
     23 
     24 struct S2
     25 {
     26   static int v2; // expected-note{{previous declaration is here}}
     27   static int v2; //expected-error{{duplicate member 'v2'}}
     28 };
     29 
     30 struct S3
     31 {
     32   static int v3;
     33   struct S4
     34   {
     35     static int v3;
     36   };
     37 };
     38 
     39 struct S4
     40 {
     41   static int v4;
     42 };
     43 
     44 int S4::v4; //expected-note{{previous definition is here}}
     45 int S4::v4; //expected-error{{redefinition of 'v4'}}
     46 
     47 struct S5
     48 {
     49   static int v5; //expected-note{{previous definition is here}}
     50   void v5() { } //expected-error{{redefinition of 'v5' as different kind of symbol}}
     51 
     52   void v6() { } //expected-note{{previous definition is here}}
     53   static int v6; //expected-error{{redefinition of 'v6' as different kind of symbol}}
     54 
     55   void v7() { }
     56   void v7(int) { } //expected-note{{previous definition is here}}
     57   static int v7;  //expected-error{{redefinition of 'v7' as different kind of symbol}}
     58 
     59   void v8();
     60   int v8(int); //expected-note{{previous declaration is here}}
     61   int v8; //expected-error{{duplicate member 'v8'}}
     62 
     63 
     64 };
     65 
     66 namespace PR8245 {
     67   class X {
     68   public:
     69     template<class C>
     70     class Inner {
     71     public:
     72       void foo(bool bar = true);
     73       int bam;
     74     };
     75 
     76     Inner<int> _foo;
     77   };
     78 
     79   void f() {
     80     X::Inner<int> c2i;
     81     X::Inner<float> c2f;
     82     c2i.foo();
     83     c2f.foo();
     84   }
     85 
     86   class Y {
     87     class Inner {
     88       void foo(int = sizeof(Y));
     89     };
     90   };
     91 }
     92