class Base
{
  virtual Base* Duplicate() const { return new Base(*this); }
};

class Derived : public Base
{
  virtual Derived* Duplicate() const { return new Derived(*this); }
};

という複製処理を仮想関数として作成する場合、
Derived::Duplicate()の戻り値がDerived*でよいのは仕様として決まっていますか?
Visual Studioではちゃんと仮想関数として動くのですが。

それとも、どちらもBase*としておくべきですか?