Home | History | Annotate | Download | only in SemaTemplate
      1 // RUN: %clang_cc1 -fsyntax-only -verify %s
      2 
      3 namespace PR6915 {
      4   template <typename T>
      5   class D {
      6     enum T::X v; // expected-error{{use of 'X' with tag type that does not match previous declaration}} \
      7     // expected-error{{no enum named 'X' in 'PR6915::D3'}}
      8   };
      9 
     10   struct D1 {
     11     enum X { value };
     12   };
     13   struct D2 {
     14     class X { }; // expected-note{{previous use is here}}
     15   };
     16   struct D3 { };
     17 
     18   template class D<D1>;
     19   template class D<D2>; // expected-note{{in instantiation of}}
     20   template class D<D3>; // expected-note{{in instantiation of}}
     21 }
     22 
     23 template<typename T>
     24 struct DeclOrDef {
     25   enum T::foo; // expected-error{{nested name specifier for a declaration cannot depend on a template parameter}}
     26   enum T::bar { // expected-error{{nested name specifier for a declaration cannot depend on a template parameter}}
     27     value
     28   };
     29 };
     30 
     31 namespace PR6649 {
     32   template <typename T> struct foo {
     33     class T::bar;  // expected-error{{nested name specifier for a declaration cannot depend on a template parameter}}
     34     class T::bar { int x; }; // expected-error{{nested name specifier for a declaration cannot depend on a template parameter}}
     35   };
     36 }
     37 
     38 namespace rdar8568507 {
     39   template <class T> struct A *makeA(T t);
     40 }
     41