// { dg-do run  }
// Origin: Mark Mitchell <mark@codesourcery.com>
struct B 
{
  B ();
  virtual void f () = 0;
};
B::B () 
{
}
extern B* bp;
template <class T>
struct C : public B
{
  virtual void f () 
    {
    }
};
template <class T>
struct D : public B
{
  virtual void f () 
    {
      bp = new C<T*>;
    }
};
B* bp = new D<int>;
int main ()
{
  bp->f ();
  bp->f ();
}