The implementation of return value optimization in D51741 turns
co_return value;
which is essentially
__promise.return_value(value);
into
__promise.return_value(decltype<value>(std::move(value)));
instead of
__promise.return_value(std::move(value));
Instead of doing a copy/move initialization, which is only required for
regular return statements, we just cast to an xvalue reference when we
can consume an object.
Also simplifies the test: some flags aren't needed, neither is main.
Instead we now check that no move constructor is emitted in certain
cases. (That is, we actually delete the move constructor.)
Should be renamed to RVOCandidate, I don't think NRVO can happen here.