xvalue上的下标表达式的值类别

led*_*ter 3 c++ rvalue-reference language-lawyer xvalue c++14

从5.2.1.1开始:

表达式E1[E2](根据定义)与*((E1)+(E2))[...]相同,除了在数组操作数的情况下,如果该操作数是左值,则结果为左值,否则为x值.

但是,使用以下代码:

struct S
{
    int arr[5];
};

int main()
{
    int &&r = S().arr[0];
}
Run Code Online (Sandbox Code Playgroud)

GCC和Clang都抱怨"rvalue引用不能绑定到lvalue int".

我误解了什么?据我所理解的S()是rvalue,S().arr是xvalue,所以也S().arr[0]应该是xvalue,并且应该能够绑定到rvalue refs.

Bar*_*rry 5

你是正确的,因为你引用的原因.S().arr[0]DR 1213的xvalue ,因此您应该能够将rvalue引用绑定到它.

这是gcc bug 79832.请注意,铿锵声HEAD编译这个罚款.