Смотрел недавно видео, и там наш буржуйский коллега красиво расписывал, как получать повисшие (dangled) ссылки
Не понял один момент
struct A {};
struct B {
A a_;
A get() { return a_;}
};
namespace my {
template <typename T> T const & min( T const & a, T const &b ) { return a<b ? b: a; }
}
void main() {
B t1, t2;
const A& t3 = t1.get(); // сработало нормально, из-за temporary timelife extension
const A& dangled_reference = my::min( t1.get(), t2.get() ); // повисшая ссылка
}
Так вот, товарищ утверждал, что в
const A& dangled_reference = my::min( t1.get(), t2.get() );
будет повисшая ссылка,мотивируя это тем, что temporary timelife extension не работает через rvalue
Я читал последний стандарт п. 6.10 про glvalue, prvalue, rvalue и xvalue
так же п. 15.2 про расширение времени жизни переменной, и не смог связать стандарт и утверждения коллеги.
Буду благодарен, если вы объясните мне вопрос, желательно с опорой на стандарт. Возможно, я просто плохо перевожу и распарсиваю наш главный мануал.