'Why was it nessesury to allow std::move accept reference to lvalue besides reference to rvalue in Uref embodiment for both?

Considering that rvalue-ness and lvalue-ness are not a features of objects but of expressions.

Why isn't std::move implemented only for lvalue reference argument, but for universal one? Whereas it is useful only for retrieving rvalue reference from an lvalue? When rvalue is rvalue already and it does not need std::move functionality.

template <typename T>
typename std::remove_reference_t<T>&& move(T&& x)
{
  return static_cast<std::remove_reference_t<T>&&>(x);
}


Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source