зауженное расширение времени жизни
От: Molchalnik  
Дата: 08.11.19 03:11
Оценка:
Смотрел недавно видео, и там наш буржуйский коллега красиво расписывал, как получать повисшие (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 про расширение времени жизни переменной, и не смог связать стандарт и утверждения коллеги.

Буду благодарен, если вы объясните мне вопрос, желательно с опорой на стандарт. Возможно, я просто плохо перевожу и распарсиваю наш главный мануал.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.