If (2) is called, type of argument passed to 'param' is converted from std::string to std::string&& because of std::move(). But people said 'param' is l-value, not r-value because it has its own name. They say 'param' is re-casted by std::forward() and passed to overloaded_function()[II].
Then is 'param' l-value that has r-value reference type?
Plus, as I know, every functions' return value is treated as r-value. Is it correct? If so, Can I substitute std::move() in (2) to other function call to call overloaded_function()[II]?
l-value's are loosely recognized as those which can be on the left side of an assignment, i.e. can accept assignment.
They have a location in memory, and you can get their address.
Geniune r-value's are those which can only be on the right side because they can't accept assignment. r-value's are usually expressions which may be temporary, you might not be able to get the address of one and that may be because they are optimized to a compile time expressions (constexpr or related), and therefore either can't accept assignment or an assignment would be meaningless.
int & get_an_int();
If the code above is a member function, and it returns a reference to a member int, then it can be used as an l-value
get_an_int() = 5;
I offer that merely to point out an exception to your point about returns.
Now, more to your question. The return from std::move is declared in the documentation:
> every functions' return value is treated as r-value. Is it correct?
No.
If the return type of the function is not a reference, the value category of the call expression is prvalue
If the return type of the function is an lvalue reference, the value category of the call expression is lvalue
If the return type of the function is an rvalue reference to object, the value category of the call expression is xvalue