Quando é a covariância C ++ a melhor solução?

Essa questão Foi perguntado aqui algumas horas atrás e me fez perceber que eu nunca usei tipos de retorno covariantes no meu próprio código. Para aqueles que não têm certeza sobre qual é a covariância, ela permite que o tipo de retorno de funções virtuais (tipicamente) seja diferente, desde que os tipos façam parte da mesma hierarquia de herança. Por exemplo:

struct A {
   virtual ~A();
   virtual A * f();
   ...
};

struct B : public A {
   virtual B * f();
   ...
};

Os diferentes tipos de retorno das duas funções f () são ditas covariantes. Versões mais antigas do C ++ exigiam que os tipos de retorno fossem os mesmos, então B teria que se parecer com:

struct B : public A {
   virtual A * f();
   ...
};

Então, minha pergunta: alguém tem um exemplo do mundo real em que tipos de funções virtuais de retorno covariantes são necessários ou produz uma solução superior para simplesmente retornar um ponteiro base ou referência?

questionAnswers(6)

yourAnswerToTheQuestion