写作是否const auto& [a, b] = f();
保证延长从返回的对象的生命周期f()
,或者至少是对象a
和b
绑定的对象?通读该提案,我没有看到任何明显的语言来确保它确实有效,除非它只是被其他东西所涵盖。但是,以下内容不会延长临时的生命周期,所以我看不出它会如何被覆盖:
const auto& a = std::get<0>(f());
在论文的顶部,它似乎暗示它已被覆盖
分解声明的 cv-qualifiers 和 ref-qualifier 应用于为初始化程序引入的引用,而不是单个成员别名
但是在实际标准的建议措辞中,我看到的最接近的提及如下,尽管我不确定如何阅读它以获得我正在寻找的保证:
如果 e 是一个无括号的 id 表达式,命名从分解声明的标识符列表中引入的左值或引用,则 decltype(e) 是分解声明规范中给出的引用类型
似乎 gcc 和 clang 都将返回的对象的生命周期延长到基于wandbox 实验的范围结束。为我自己的类型实现所有花里胡哨的更丑陋的似乎延长了外部对象及其其他数据成员的生命周期。
尽管几乎可以肯定作者的意图,但我想确定该语言保证这是安全的。