brintos

brintos / llvm-project-archived public Read only

0
0
Text · 2.2 KiB · 734269e Raw
122 lines · cpp
1// RUN: %clang_cc1 -fsyntax-only -verify -std=c++11 %s2 3template<typename A> class s0 {4  template<typename B> class s1;5};6 7template<typename A>8template<typename B>9class s0<A>::s1 : s0<A> {10  ~s1() {}11  s0<A> ms0;12};13 14struct Incomplete;15 16template<typename T>17void destroy_me(T me) {18  me.~T();19}20 21template void destroy_me(Incomplete*);22 23namespace PR6152 {24  template<typename T> struct X { void f(); };25  template<typename T> struct Y { };26  template<typename T>27  void X<T>::f() {28    Y<T> *y;29    y->template Y<T>::~Y();30    y->template Y<T>::~Y<T>();31    y->~Y();32  }33 34  template struct X<int>;35}36 37namespace cvquals {38  template<typename T>39  void f(int *ptr) {40    ptr->~T();41  }42 43  template void f<const volatile int>(int *);44}45 46namespace PR7239 {47  template<class E> class A { };48  class B {49    void f() {50      A<int>* x;51      x->A<int>::~A<int>();52    }53  };54}55 56namespace PR7904 {57  struct Foo {};58  template <class T>59  Foo::~Foo() { // expected-error{{destructor cannot be declared as a template}}60    T t;61    T &pT = t;62    pT;63  }64  Foo f;65}66 67namespace rdar13140795 {68  template <class T> class shared_ptr {};69 70  template <typename T> struct Marshal {71    static int gc();72  };73 74 75  template <typename T> int Marshal<T>::gc() {76    shared_ptr<T> *x;77    x->template shared_ptr<T>::~shared_ptr();78    return 0;79  }80 81  void test() {82    Marshal<int>::gc();83  }84}85 86namespace PR16852 {87  template<typename T> struct S { int a; T x; };88  template<typename T> decltype(S<T>().~S()) f(); // expected-note {{candidate template ignored: couldn't infer template argument 'T'}}89  void g() { f(); } // expected-error {{no matching function for call to 'f'}}90}91 92class PR3318993{94  template <class T>95  ~PR33189() { } // expected-error{{destructor cannot be declared as a template}}96};97 98namespace PR38671 {99struct S {100  template <class>101  ~S(); // expected-error{{destructor cannot be declared as a template}}102};103struct T : S {104  ~T() = default;105};106} // namespace PR38671107 108namespace GH159630 {109 110struct X {111  template<typename T>112  struct typo { // expected-note {{'typo' declared here}}113    ~typo();114  };115};116 117template<typename T>118X::typo<T>::typ0::~typ0() {} // expected-error {{no member named 'typ0'}} \119                             // expected-error {{no type named 'typ0'}}120 121}122