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 // expected-error@-1{{forward declaration of enum cannot have a nested name specifier}} 27 enum T::bar { // expected-error{{nested name specifier for a declaration cannot depend on a template parameter}} 28 value 29 }; 30 }; 31 32 namespace PR6649 { 33 template <typename T> struct foo { 34 class T::bar; // expected-error{{nested name specifier for a declaration cannot depend on a template parameter}} 35 // expected-error@-1{{forward declaration of class cannot have a nested name specifier}} 36 class T::bar { int x; }; // expected-error{{nested name specifier for a declaration cannot depend on a template parameter}} 37 }; 38 } 39 40 namespace rdar8568507 { 41 template <class T> struct A *makeA(T t); 42 } 43