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));
}