> Despite there is a fundamental difference between prvalue and xrvalue, yet
> we are not taking advantage of that because we cannot differentiate between
> them.
>What advantage do you foresee taking if you could tell the difference? Can you
>give 3 different examples?
Yes,* a prvalue is certain to end its lifetime inside the body of the callee, while an xrvalue doesn't. This will allow to give the move operation a more precise meaning for both.
* program binary size can be reduced.
The current state of implementing a temporary in a call is as follow:
void foo(T arg);
- becomes->
{
T arg{};
foo(&arg);
}
Which calls ~T(), outside the callee body.
So if we have a million call site to foo, then there is a million deduplication of ~T().
* exception wise: if the destructor of T throws an exception, then it is thrown in the context of the caller not the callee which is counter intuitive. Because a temporary exists only inside the callee.