// { dg-do run }

template<int patch_dim, int patch_space_dim>
class DataOutInterface
{
 public:
  virtual ~DataOutInterface() {}
};

template <int dof_handler_dim, int patch_dim, int patch_space_dim=patch_dim>
class DataOut_DoFData : public DataOutInterface<patch_dim,patch_space_dim>
{
 public:
  virtual ~DataOut_DoFData() {}

class DataEntryBase {
 public:
  virtual ~DataEntryBase () {}
};

template <typename T>
class DataEntry : public DataEntryBase
{
 public:
  virtual ~DataEntry() {}
};
};

template <typename T> void Destroy(T * p) __attribute__((noinline));
template <typename T> void Destroy(T * p)
{
  delete p;
}

int main()
{
  DataOut_DoFData<3,3>::DataEntryBase * p  = new DataOut_DoFData<3,3>::DataEntry<int>();
  Destroy(p);
}
