No, IMO we should return const string& or just string.
If the client of this call get a const string on stack, it can't change it anymore, like func().append("..."); 
However if the client of this call get a string instead, it can convert it to const if needed, like
const string ret(func());

What we want to pass is a string, we don't care the client how to use it, right?