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