https://gcc.gnu.org/bugzilla/show_bug.cgi?id=113113
Bug ID: 113113 Summary: False -Wmismatched-new-delete in case of destroying operator delete Product: gcc Version: 13.2.1 Status: UNCONFIRMED Severity: normal Priority: P3 Component: c++ Assignee: unassigned at gcc dot gnu.org Reporter: fchelnokov at gmail dot com Target Milestone: --- Consider the program as follows: #include <new> struct Shape { void operator delete(Shape *, std::destroying_delete_t); }; struct Triangle : Shape {}; void Shape::operator delete(Shape *p, std::destroying_delete_t) { static_cast<Triangle *>(p)->~Triangle(); ::operator delete(p); } int main() { Shape *p = new Triangle; delete p; } GCC issues presumably false warning: 'static void Shape::operator delete(Shape*, std::destroying_delete_t)' called on pointer returned from a mismatched allocation function [-Wmismatched-new-delete] for this program as well as for longer original one from https://stackoverflow.com/a/67595790/7325599 Online demo: https://godbolt.org/z/Pfc4PaGbd