¿Por qué C ++ no mueve las referencias de valor de construcción por defecto? [duplicar

Esta pregunta ya tiene una respuesta aquí:

@Rvalue Reference se trata como un Lvalue? 4 respuestase llama al constructor de referencia @Lvalue en lugar del constructor de referencia rvalue 1 respuesta

Di que tengo la siguiente función

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

¿Por qué necesito lanzarparam volver a un valor constd::move()? ¿No debería ser obvio que el tipo deparam es rvalue ya que se declaró en la firma de la función como una referencia de rvalue? ¿No debería invocarse automáticamente el constructor de movimientos aquí solo con este principio?

¿Por qué no sucede esto por defecto?

Respuestas a la pregunta(1)

Su respuesta a la pregunta