Гарантирует ли запись 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. более уродливый, реализующий все навороты для моего собственного типа, кажется, продлевает время жизни внешнего объекта и других его данных. члены.
Хотя почти наверняка намерения авторов, я хотел бы знать наверняка, что язык гарантирует, что это безопасно.