Reborn Anew

Which statement about this code is correct?

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

This only works if Derived::clone is not marked override

B

This doesn't compile: the return type of an overriding function must exactly match the base version

C

This compiles: an overriding function can return a pointer/reference to a more derived type than the base version returns, which is called a covariant return type

D

This compiles but causes undefined behavior because the return types differ