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

时间:2017-03-12 17:26:28

标签: c++ c++14 language-lawyer rvalue-reference xvalue

从5.2.1.1开始:

  

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

但是,使用以下代码:

struct S
{
    int arr[5];
};

int main()
{
    int &&r = S().arr[0];
}
GCC和Clang都抱怨“rvalue引用无法绑定到lvalue int”。

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

1 个答案:

答案 0 :(得分:5)

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

这是gcc bug 79832。请注意,clang HEAD会编译此fine