用代码就好
#include <iostream>
struct P {
int x;
P(int x) : x(x) {}
~P() { std::cout << "~P()\n"; }
};
int main() {
auto const& x = P{10}.x;
std::cout << "extract\n";
}
Run Code Online (Sandbox Code Playgroud)
GCC打印~P() extract,表示临时的生命周期未被引用扩展.
相比之下,Clang(IMO正确)将临时的生命周期延长到引用的生命周期,x因此析构函数将在输出后调用main.
请注意,如果我们int使用某种类型(例如string),GCC会突然显示Clang的行为.
这是GCC中的错误还是标准允许的内容?