1 #ifndef OVERLOADED_DELETE_IN_HEADER 2 #define OVERLOADED_DELETE_IN_HEADER 3 4 struct DeleteInHeader { 5 int data; 6 static void operator delete(void *ptr); 7 }; 8 9 void DeleteInHeader::operator delete(void *ptr) { 10 DeleteInHeader *self = (DeleteInHeader *)ptr; 11 self->data = 1; // no-warning: Still alive. 12 13 ::operator delete(ptr); 14 15 self->data = 2; // expected-warning {{Use of memory after it is freed [cplusplus.NewDelete]}} 16 } 17 18 #endif // OVERLOADED_DELETE_IN_SYSTEM_HEADER 19