http://gcc.gnu.org/bugzilla/show_bug.cgi?id=53341
Bug #: 53341 Summary: overloaded operator delete(void *) appear in object file even when not directly used Classification: Unclassified Product: gcc Version: 4.7.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: c++ AssignedTo: unassig...@gcc.gnu.org ReportedBy: mh+...@glandium.org Consider the following program: ---------8<---------- #include <algorithm> extern void moz_free(void *ptr); __attribute__((always_inline)) inline void operator delete(void* ptr) throw() { return moz_free(ptr); } int foo() { return 42; } ---------8<---------- g++ -std=c++0x will put two symbols in the resulting object: _ZdlPv and _Z3foov. The former is operator delete(void *) This doesn't happen when including <new> instead of <algorithm>. This doesn't happen without -std=c++0x. This doesn't happen with operator new, operator new[], or operator delete[]. This doesn't happen when removing __attribute__((__externally_visible__)) from /usr/include/c++/4.7/new. (added in bug 50594)