Категория значений индекса-выражения на xvalue

Из 5.2.1.1:

Выражение E1[E2] идентичен (по определению) *((E1)+(E2)) […] за исключением того, что в случае операнда массива, результатом является lvalue, если этот операнд является lvalue и 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.

3

Решение

Вы правы по той причине, которую цитируете. S().arr[0] это xvalue с DR 1213, так что вы должны иметь возможность связать ссылку на него.

Это gcc bug 79832. Обратите внимание, что clang HEAD компилирует это отлично.

5

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]