从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。
答案 0 :(得分:5)
你是对的,因为你引用的原因。 S().arr[0]
是DR 1213的xvalue,因此您应该能够将右值引用绑定到它。
这是gcc bug 79832。请注意,clang HEAD会编译此fine。