Мне любопытно, как именно работает эта функция. Рассмотрим что-то вроде
std::unique_ptr<int> f() { std::unique_ptr<int> lval(nullptr); return lval; }
Этот код прекрасно компилируется даже для типа move -, так как компилятор неявно перемещает его. Но логически, для любого возвращаемого выражения определение того, ссылается ли результат на локальную переменную, было бы решением проблемы остановки -, и если бы компилятор просто обрабатывал все локальные переменные как значения r в возвращаемом выражении, то это было бы проблематично, поскольку на переменную можно ссылаться в одном выражении несколько раз. Даже если у локального объекта была только одна прямая ссылка, вы не сможете доказать, что у него нет других косвенных псевдонимов.
Так как же компилятор узнает, когда переходить от возвращаемого выражения?