Similar to D25446, this prevents accidentally referring to temporary storage that goes out of scope by the end of the statement:
someStringRef = getStringByValue(); someStringRef = (Twine("-") + otherString).str();
Note that once again the constructor still has this problem:
StringRef someStringRef = getStringByValue();
because once again we occasionally rely on this in calls:
takesStringRef(getStringByValue()); takesStringRef(Twine("-") + otherString);
Still, it's a step, and it caught one real problem in Clang and one in Swift.
Depends on D26317