Расширяют ли ссылки на const в структурированных привязках время жизни разложенного объекта?
Делает записьconst auto& [a, b] = f();
гарантия продления срока службы возвращаемого объектаf()
или хотя бы объектыa
а такжеb
связаны с? Читая черезпредложение Я не вижу в языке ничего очевидного, чтобы убедить меня в этом, если только это не покрыто чем-то другим. Тем не менее, следующее не продлевает время жизни временного, поэтому я не вижу, как это будет покрыто:
const auto& a = std::get<0>(f());
В верхней части бумаги, кажется, предполагается, что она покрыта
cv-квалификаторы и ref-квалификаторы объявления декомпозиции применяются к ссылке, введенной для инициализатора, а не для псевдонимов отдельных членов
Но в предложенной формулировке для фактического стандарта ниже приводится самое близкое упоминание, хотя я не уверен, как его прочитать, чтобы получить гарантию, которую я ищу:
если e - это не выраженное в скобках id-выражение с именем lvalue или ссылкой, введенной из списка идентификаторов объявления декомпозиции, decltype (e) является ссылочным типом, как указано в спецификации объявления декомпозиции.
Кажется, что gcc и clang продлевают время жизни возвращаемого объекта до конца области действия, основываясь наэксперимент с wandbox,уродливее реализация всех наворотов для моего собственного типа, кажется, продлевает время жизни внешнего объекта и других его членов данных.
Хотя авторы почти наверняка намерены, я хотел бы знать наверняка, что язык гарантирует, что это безопасно.