Ковариантный тип возвращаемого значения и преобразование типа

s->duplicate() возвращает объект типаBox*, но я получаю сообщение об ошибке при инициализации сBox*, Похоже, он превращается обратно вShape*, Какой смысл иметь ковариантные возвращаемые типы, если он конвертируется обратно в указатель базового класса ?:

struct Shape
{
    virtual Shape* duplicate()
    {
        return new Shape;
    }
};

struct Box : Shape
{
    virtual Box* duplicate()
    {
        return new Box;
    }
};

int main()
{
    Shape* s = new Box;
    Box*   b = s->duplicate();
}

Ошибка:

main.cpp:22:12: error: cannot initialize a variable of type 'Box *' with an rvalue of type 'Shape *'
    Box*   b = s->duplicate();
           ^   ~~~~~~~~~~~~~~
1 error generated.

Ответы на вопрос(1)

Ваш ответ на вопрос