Здравствуйте, ollv, Вы писали:
O>>>>>+ к тому есть продление жизни для ссылок — тоже опасное поведение, с такими трюками можно легко запутаться особенно присутствуют сложные вычисления типов BFE>>>>Здесь нет продления жизни для ссылок. O>>>есть но завуалированное. ссылка принимает rvalue и объект живет, в то время как rvalue уже умирает по стандарту после вызова конструктора. Потому оно и не компилируется в джисях BFE>>rvalue — это выражение, оно не может жить или умереть. O> Не знаю о чем ты )) к rvalue вполне применим термин lifetime.
Что обозначает lifetime для rvalue?
O>Что касается выражения, синтаксически все, что попадает в конечном счете в АСТ — expression. такова селяви синтаксического анализа.
И какое отношение это имеет ко времени жизни?
O>Объект — это уже физика языка, так вот живет объект как rvalue, выражением в данном случае будет именно std::vector<int>() -> arg, вот здесь оно и умрет, после инициализации параметра.
Выражение умрёт? Или умрёт объект?
BFE>>А вот временные объекты обязаны дожить (по стандарту) до конца выполнения выражения, O> Только вот конец выражения будет ровно после запятой (или скобки), std::vector<int>() -> arg.
Конец full-expression'а?
O> И если арг не проинициализируется от рвелью и не продлит жизнь объекту, он умрет.
Если арг не проинициализируется, то и функция вызвана не будет. Причём тут продление жизни для ссылок?