1// RUN: %clang_cc1 -fsyntax-only -verify %s
2
3namespace 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
23template<typename T>
24struct 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
31namespace 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
38namespace rdar8568507 {
39  template <class T> struct A *makeA(T t);
40}
41