¿Cuándo es la covarianza de C ++ la mejor solución?

Esta pregunta Hace unas horas me preguntaron aquí y me hizo darme cuenta de que nunca he usado tipos de devolución covariantes en mi propio código. Para aquellos que no están seguros de qué es la covarianza, está permitiendo que el tipo de retorno de (típicamente) las funciones virtuales difiera siempre que los tipos sean parte de la misma jerarquía de herencia. Por ejemplo:

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

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

Los diferentes tipos de retorno de las dos funciones f () se dice que son covariantes. Las versiones anteriores de C ++ requerían que los tipos de retorno fueran iguales, por lo que B tendría que verse así:

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

Entonces, mi pregunta: ¿Alguien tiene un ejemplo del mundo real en el que se requieran tipos de funciones virtuales covariantes de retorno, o se produzca una solución superior para simplemente devolver un puntero base o una referencia?

Respuestas a la pregunta(6)

Su respuesta a la pregunta