Por que a chamada explícita do construtor base move realmente chama o construtor base copy? [duplicado

Esta pergunta já tem uma resposta aqui:

Move construtor no objeto derivado 2 respostas

Estou tentando chamar explicitamente o movedor de classe base através do movedor de classe derivada, mas,surpresa, que na verdade chama o controlador de cópia da classe base e NÃO o controlador de movimentação da classe bas

Estou a usarstd::move() função em um objeto para garantir que o movedor derivado esteja sendo chamado!

O 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;
}

PROGRAM OUTPUT:

base copy ctor

derived move ctor

omo você vê, o controlador de movimento da classe base está sendo esquecido, então como eu o cham

questionAnswers(6)

yourAnswerToTheQuestion