Здравствуйте, vdimas, Вы писали:
V>В исходном примере, скорее, так:
V>V>{
V> const int &tmp = 42; // текущий scope
V> {
V> const int &r = tmp; // scope выражения-вызова конструктора
V> }
V>}
V>
V>ИМХО, время жизни временного объекта 42 должно быть продлено.
Ну вот вообще не так!
Проблема же в том, что функция min получает ссылки — и возвращает ссылки. А принимающая сторона ничего не знает про время жизни этих возвращённых ссылок, поэтому и продлевать не может.
Нужно написать такую версию min, которая если получает хотя бы один rvalue reference, то должна возвращать rvalue, и пусть принимающая сторона делает copy elision и продлевает жизнь как хочет, на своё усмотрение.