Home | History | Annotate | Download | only in temp.local
      1 // RUN: %clang_cc1 -verify %s -fcxx-exceptions -std=c++1y
      2 
      3 template<typename T, // expected-note {{declared here}}
      4          typename T> struct X {}; // expected-error {{declaration of 'T' shadows template parameter}}
      5 
      6 template<typename T> struct Y { // expected-note 15{{declared here}}
      7   template<typename T> struct A {}; // expected-error {{declaration of 'T' shadows template parameter}}
      8 
      9   struct B {
     10     template<typename> struct T {}; // FIXME: desired-error {{declaration of 'T' shadows template parameter}}
     11   };
     12   struct C {
     13     template<typename> void T(); // expected-error {{declaration of 'T' shadows template parameter}}
     14   };
     15   struct D {
     16     struct T {}; // expected-error {{declaration of 'T' shadows template parameter}}
     17   };
     18   struct E {
     19     typedef int T; // expected-error {{declaration of 'T' shadows template parameter}}
     20   };
     21   struct F {
     22     using T = int; // expected-error {{declaration of 'T' shadows template parameter}}
     23   };
     24   struct G {
     25     int T; // expected-error {{declaration of 'T' shadows template parameter}}
     26   };
     27   struct H {
     28     static int T; // expected-error {{declaration of 'T' shadows template parameter}}
     29   };
     30   struct I {
     31     void T(); // expected-error {{declaration of 'T' shadows template parameter}}
     32   };
     33   struct J {
     34     enum T { e }; // expected-error {{declaration of 'T' shadows template parameter}}
     35   };
     36   struct K {
     37     enum E { T }; // expected-error {{declaration of 'T' shadows template parameter}}
     38   };
     39 
     40   void a() {
     41     extern int T; // expected-error {{declaration of 'T' shadows template parameter}}
     42   }
     43   void b() {
     44     int T; // expected-error {{declaration of 'T' shadows template parameter}}
     45   }
     46   void c() {
     47     try {}
     48     catch (int T) {} // expected-error {{declaration of 'T' shadows template parameter}}
     49   }
     50   void d() {
     51     void T(); // expected-error {{declaration of 'T' shadows template parameter}}
     52   }
     53 
     54   friend struct T; // expected-error {{declaration of 'T' shadows template parameter}}
     55 };
     56 
     57 template<typename T> // expected-note {{declared here}}
     58 void f(int T) {} // expected-error {{declaration of 'T' shadows template parameter}}
     59 
     60 // FIXME: These are ill-formed: a template-parameter shall not have the same name as the template name.
     61 namespace A {
     62   template<typename T> struct T {};
     63 }
     64 namespace B {
     65   template<typename T> void T() {}
     66 }
     67 namespace C {
     68   template<typename T> int T;
     69 }
     70