// { dg-do run } template class DataOutInterface { public: virtual ~DataOutInterface() {} }; template class DataOut_DoFData : public DataOutInterface { public: virtual ~DataOut_DoFData() {} class DataEntryBase { public: virtual ~DataEntryBase () {} }; template class DataEntry : public DataEntryBase { public: virtual ~DataEntry() {} }; }; template void Destroy(T * p) __attribute__((noinline)); template void Destroy(T * p) { delete p; } int main() { DataOut_DoFData<3,3>::DataEntryBase * p = new DataOut_DoFData<3,3>::DataEntry(); Destroy(p); }