brintos

brintos / llvm-project-archived public Read only

0
0
Text · 1.6 KiB · 93a7231 Raw
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