Por que o C ++ não move referências de rvalue de construção por padrão? [duplicado

Esta pergunta já tem uma resposta aqui:

Referência de valor é tratada como um valor L 4 respostas construtor de referência @value é chamado em vez do construtor de referência rvalue 1 resposta

Diz que tenho a seguinte função

void doWork(Widget && param)  // param is an LVALUE of RRef type
{
    Widget store = std::move(param); 
}

Por que preciso transmitirparam volta a um rvalor comstd::move()? Não deveria ser óbvio que o tipo deparam é rvalue desde que foi declarado na assinatura da função como uma referência rvalue? O construtor de movimentação não deve ser invocado automaticamente aqui somente com este princípio?

Por que isso não acontece por padrão?

questionAnswers(1)

yourAnswerToTheQuestion