共変の戻り値型

東方算程譚 こばりあんすより、
私も書いてみた。

class VB
{
  public:
  virtual VB* create() { return new VB; }
};

class LB:public virtual VB
{
  public:
  virtual LB* create() { return new LB; }
};

class RB:public virtual VB
{
  public:
  virtual RB* create() { return new RB; }
};

class D:public LB, public RB
{
  public:
  virtual D* create() { return new D; }
};

VC8だとエラーが出る。
最近プログラムをあまり書いてないんだが、コンパイラのバグに遭遇する率が高い気がする(他人の遭遇率は知らないけど)。