Covariância C ++ em parâmetros

Eu queria saber por que o C ++ não suporta co-variância em parâmetros como no exemplo abaixo ou se há uma maneira de alcançá-lo?

class base {
public:
virtual base* func(base * ptr) { return new base(); }
};

class derived : public base {
 public:
 virtual derived* func(derived * ptr) override { return new derived(); } //not allowed
};

questionAnswers(1)

yourAnswerToTheQuestion