Каков тип именованной ссылки rvalue?

Рассмотрим следующий код:

int&& x = 42;
static_assert(std::is_same<decltype( x ), int&&>::value, "&&");
static_assert(std::is_same<decltype((x)), int& >::value, "&" );

Итак, что такое тип x? Это int&& или int&?

(Я задал себе этот вопрос после прочтения этого ответа.)


person fredoverflow    schedule 28.07.2011    source источник


Ответы (1)


Тип x (переменной) — int&&. Итак, decltype(x) дает int&&. Тип выражения xint. Если выражение является lvalue, decltype((x)) дает ссылку lvalue на тип выражения. Таким образом, decltype((x)) дает int&.

person Johannes Schaub - litb    schedule 28.07.2011