72 lines · cpp
1// RUN: %clang_cc1 -fsyntax-only -verify %s2template<typename T>3struct X {4 X<T*> *ptr;5};6 7X<int> x;8 9template<>10struct X<int***> {11 typedef X<int***> *ptr;12};13 14X<float>::X<int> xi = x; // expected-error{{qualified reference to 'X' is a constructor name rather than a template name}}15void f() {16 X<float>::X<int> xi = x; // expected-error{{qualified reference to 'X' is a constructor name rather than a template name}}17}18 19// [temp.local]p1:20 21// FIXME: test template template parameters22template<typename T, typename U>23struct X0 {24 typedef T type;25 typedef U U_type;26 typedef U_type U_type2;27 28 void f0(const X0&); // expected-note{{here}}29 void f0(X0&);30 void f0(const X0<T, U>&); // expected-error{{redecl}}31 32 void f1(const X0&); // expected-note{{here}}33 void f1(X0&);34 void f1(const X0<type, U_type2>&); // expected-error{{redecl}}35 36 void f2(const X0&); // expected-note{{here}}37 void f2(X0&);38 void f2(const ::X0<type, U_type2>&); // expected-error{{redecl}}39};40 41template<typename T, T N>42struct X1 {43 void f0(const X1&); // expected-note{{here}}44 void f0(X1&);45 void f0(const X1<T, N>&); // expected-error{{redecl}}46};47 48namespace pr6326 {49 template <class T> class A {50 friend class A;51 };52 template class A<int>;53}54 55namespace ForwardDecls {56 template<typename T>57 struct X;58 59 template<typename T>60 struct X {61 typedef T foo;62 typedef X<T> xt;63 typename xt::foo *t;64 };65}66 67namespace ConflictingRedecl {68 template<typename> struct Nested {69 template<typename> struct Nested; // expected-error {{member 'Nested' has the same name as its class}}70 };71}72