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

Value category of the subscript-expression on xvalue

从 5.2.1.1 开始:

The expression E1[E2] is identical (by definition) to *((E1)+(E2)) [...] except that in the case of an array operand, the result is an lvalue if that operand is an lvalue and an xvalue otherwise.

但是,使用以下代码:

struct S
{
    int arr[5];
};

int main()
{
    int &&r = S().arr[0];
}

GCC 和 Clang 都抱怨 "rvalue reference cannot bind to lvalue int"。

我误解了什么?据我了解 S() 是右值,S().arr 是 xvalue,所以 S().arr[0] 也应该是 xvalue 并且应该能够绑定到右值引用。

你是对的,因为你引用的原因。 S().arr[0]DR 1213 起是一个 xvalue,因此您应该能够将右值引用绑定到它。

这是gcc bug 79832. Note that clang HEAD compiles this fine