Re[5]: Правомерно ли такое
От: T4r4sB Россия  
Дата: 18.08.20 15:57
Оценка:
Здравствуйте, rg45, Вы писали:

R>Возможен сценарий получения битой ссылки. При нынешних-то тенденциях максимально широкого использования auto&&:


R>
R>auto&& v = push_back_helper( std::vector<int>(), i );
R>


Собрал я такой код (вернее, скомпилировал в текстовый llvm с O3)

template<typename T>
T& test( T&&t)
{
    return t;
}

struct IntWrapper {
  IntWrapper(int x): x(x) {}
  ~IntWrapper() { x = 1; }
  int getX() { return x; }
  int x;
};

int main()
{
  auto&& i = test(IntWrapper(0));
  return i.getX();
}

Превращается в возврат 1
(((
По коду ссылка не битая, но она указывает на мёртвый объект, у которого уже вызван деструктор
Нет такой подлости и мерзости, на которую бы не пошёл gcc ради бессмысленных 5% скорости в никому не нужном синтетическом тесте
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.