destructor.cpp revision 7c2342dd4c9947806842e5aca3d2bb2e542853c9
1// RUN: %clang_cc1 -fsyntax-only -verify %s 2class A { 3public: 4 ~A(); 5}; 6 7class B { 8public: 9 ~B() { } 10}; 11 12class C { 13public: 14 (~C)() { } 15}; 16 17struct D { 18 static void ~D(int, ...) const { } // \ 19 // expected-error{{type qualifier is not allowed on this function}} \ 20 // expected-error{{destructor cannot be declared 'static'}} \ 21 // expected-error{{destructor cannot have any parameters}} \ 22 // expected-error{{destructor cannot be variadic}} 23}; 24 25struct D2 { 26 void ~D2() { } // \ 27 // expected-error{{destructor cannot have a return type}} 28}; 29 30 31struct E; 32 33typedef E E_typedef; 34struct E { 35 ~E_typedef(); // expected-error{{destructor cannot be declared using a typedef 'E_typedef' (aka 'E') of the class name}} 36}; 37 38struct F { 39 (~F)(); // expected-note {{previous declaration is here}} 40 ~F(); // expected-error {{destructor cannot be redeclared}} 41}; 42 43~; // expected-error {{expected a class name after '~' to name a destructor}} 44~undef(); // expected-error {{expected the class name after '~' to name a destructor}} 45~operator+(int, int); // expected-error {{expected a class name after '~' to name a destructor}} 46~F(){} // expected-error {{destructor must be a non-static member function}} 47 48struct G { 49 ~G(); 50}; 51 52G::~G() { } 53 54// <rdar://problem/6841210> 55struct H { 56 ~H(void) { } 57}; 58 59struct X {}; 60 61struct Y { 62 ~X(); // expected-error {{expected the class name after '~' to name the enclosing class}} 63}; 64 65namespace PR6421 { 66 class T; // expected-note{{forward declaration}} 67 68 class QGenericArgument 69 { 70 template<typename U> 71 void foo(T t) // expected-error{{variable has incomplete type}} 72 { } 73 74 void disconnect() 75 { 76 T* t; 77 bob<QGenericArgument>(t); // expected-error{{undeclared identifier 'bob'}} 78 } 79 }; 80} 81