¿Por qué la llamada explícita del constructor de movimiento base realmente llama al constructor de copia base? [duplicar

Esta pregunta ya tiene una respuesta aquí:

Move constructor en objeto derivado 2 respuestas

Estoy tratando de llamar a la clase base move ctor explícitamente a través de la clase derivada move ctor pero,¡sorpresa, que en realidad llama a la copia de la clase base ctor NO al movimiento de la clase base ctor.

Estoy usandostd::move() ¡funcionen en un objeto para asegurarse de que se está invocando el movimiento derivado ctor!

El código

class Base
{
public:
    Base(const Base& rhs){ cout << "base copy ctor" << endl; }
    Base(Base&& rhs){ cout << "base move ctor" << endl; }
};

class Derived : public Base
{
public:

    Derived(Derived&& rhs) : Base(rhs) { cout << "derived move ctor"; }
    Derived(const Derived& rhs) : Base(rhs) { cout << "derived copy ctor" << endl; }
};

int main()
{
    Derived a;
    Derived y = std::move(a); // invoke move ctor
    cin.ignore();
    return 0;
}

SALIDA DEL PROGRAMA:

base copy ctor

derived move ctor

Como puede ver, el movimiento de la clase base se está olvidando, entonces, ¿cómo lo llamo?

Respuestas a la pregunta(6)

Su respuesta a la pregunta