Мне был показан следующий пример в чате:
#include <iostream>
struct foo { ~foo() { std::cout << "destroying!\n"; } };
const foo& func(const foo& a, const foo&) { return a; }
int main()
{
foo x;
const foo& y = func(foo(), x);
std::cout << "main\n";
}
destroying!
main
destroying!
Похоже, что время жизни временного файла foo
не распространяется на полноту main
, хотя оно привязано к ref-to-const
в этой области.
Предположительно, тогда расширение продолжительности жизни "работает только один раз"; то есть он применяется, когда аргументы func
инициализируются, но не передаются через последовательные привязки.
Является ли моя интерпретация правильной? Если это так (и если какой-либо отдельный параграф применим непосредственно), то какая стандартная формулировка определяет это поведение?