https://gcc.gnu.org/bugzilla/show_bug.cgi?id=68068
--- Comment #1 from Markus Trippelsdorf <trippels at gcc dot gnu.org> --- markus@x4 Release % cat WebDOMActivityLogger.ii template <typename T> struct A { static void deletePtr(T *p1) { delete p1; } }; template <typename> class PassOwnPtr; template <typename T> PassOwnPtr<T> adoptPtr(T *); template <typename T> class PassOwnPtr { public: template <typename U> PassOwnPtr(U); ~PassOwnPtr() { A<T>::deletePtr(m_ptr); } T *m_ptr; }; class WebDOMActivityLogger { public: virtual ~WebDOMActivityLogger() {} }; class V8DOMActivityLogger { public: void operator delete(void *); virtual ~V8DOMActivityLogger() {} static void setActivityLogger(int, PassOwnPtr<V8DOMActivityLogger>); }; WebDOMActivityLogger *a; int b; void setDOMActivityLogger() { V8DOMActivityLogger::setActivityLogger(b, adoptPtr(a)); }