LINUX.ORG.RU

Продление жизни rvalue

 


3

4

Привет.

#include <iostream>
using namespace std;
struct S{
  ~S() {cout << "destr\n";}
};
int main(){
  S &&r = (S &&) S{};
  // const S &r = (S &&) S{}; // аналогично
  cout << "-------------\n";
}
Вообще я думал, что жизнь временных объектов продливается лишь единожды - при первой инициализации ссылки им, быстрый взгляд в справочник говорит о том же. А у нас здесь две инициализации ссылки, т.е. объекту стоило бы уничтожиться после двоеточия. Но запустив тест получается, что объект переживает cout, компилятор не ругается (clang, gcc). Вопрос - будет ли жить временный объект до тех пор, пока живёт r, вообще он живёт, но насколько это по правилам?

In general, the lifetime of a temporary cannot be further extended by «passing it on»: a second reference, initialized from the reference to which the temporary was bound, does not affect its lifetime.

★★

Последнее исправление: pavlick (всего исправлений: 1)
Ответ на: комментарий от anonymous

Так это не адрес комитета.

На адрес комитета просто так не напишешь, там закрытая подписка.

anonymous
()
Ответ на: комментарий от anonymous

конечно не адрес комитета, зачем там им ваши сопли

anonymous
()
Ответ на: комментарий от anonymous

Туда в основном не по делу. По делу в std-proposals.

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.