// RUN: clang-cc -fsyntax-only -verify -std=c++0x %s // Test1 struct B { operator char *(); }; struct D : B { operator int *(); }; void f (D d) { delete d; // expected-error {{cannot delete expression of type 'struct D'}} } // Test2 struct B1 { operator int *(); }; struct D1 : B1 { operator int *(); }; void f1 (D1 d) { delete d; } // Test3 struct B2 { operator const int *(); }; struct D2 : B2 { operator int *(); }; void f2 (D2 d) { delete d; // expected-error {{cannot delete expression of type 'struct D2'}} } // Test4 struct B3 { operator const int *(); }; struct A3 { operator const int *(); }; struct D3 : A3, B3 { }; void f3 (D3 d) { delete d; // expected-error {{cannot delete expression of type 'struct D3'}} } // Test5 struct X { operator int(); operator int*(); }; void f4(X x) { delete x; delete x; } // Test6 struct X1 { operator int(); operator int*(); template operator T*() const; // converts to any pointer! }; void f5(X1 x) { delete x; } // FIXME. May have to issue error here too.