blob: 514c5f2d57f4aa861ad36a48d77e6284cdac30f0 [file] [log] [blame]
Douglas Gregorfdf43162010-04-24 16:38:41 +00001// 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}}
Douglas Gregor44c7afc2010-04-24 16:40:35 +000034 class T::bar { int x; }; // expected-error{{nested name specifier for a declaration cannot depend on a template parameter}}
Douglas Gregorfdf43162010-04-24 16:38:41 +000035 };
36}
John McCall539d36b2010-10-19 18:40:57 +000037
38namespace rdar8568507 {
39 template <class T> struct A *makeA(T t);
40}