Почему C ++ не перемещает конструкции по умолчанию? [Дубликат]

На этот вопрос уже есть ответ:

Rvalue Ссылка рассматривается как Lvalue? 4 ответа Ссылочный конструктор Lvalue вызывается вместо ссылочного конструктора rvalue 1 ответ

Скажи, у меня есть следующая функция

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

Почему мне нужно сыгратьparam вернуться к значению сstd::move()? Разве не должно быть очевидно, что типparam является значением rvalue, поскольку оно было объявлено в сигнатуре функции как ссылка на значение rvalue? Не должен ли конструктор перемещения автоматически вызываться здесь только на этом принципе?

Почему это не происходит по умолчанию?