Vit*_*meo 7 c++ expression language-lawyer c++17 value-categories
考虑以下代码:
struct S
{
S& operator=(const S&) = default;
};
int main()
{
&(S() = S());
}
Run Code Online (Sandbox Code Playgroud)
GCC(主干)抱怨:
Run Code Online (Sandbox Code Playgroud)error: taking address of rvalue [-fpermissive] 8 | &(S() = S()); | ~~~~~^~~~~~
我发现上述错误令人惊讶,因为我希望S&返回类型可以生成左值表达式。另一方面,Clang(主干)在没有任何错误或警告的情况下接受代码。
什么编译器在这里是正确的?
是S() = S()右值还是左值?