#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.