Imagine:
S f(S a) {
return a;
}
Why is it not allowed to alias a and the return value slot?
S s = f(t);
S s
From t to a it is unreasonable to elide copy. The parameter is declared mutable, so copying is done because it is expected to be modified in function.
From a to return value i can not see any reasons to copy. Perhaps it is some sort of oversight? The by-value parameters feel like locals inside function body ... i see no difference there.