Каков тип именованной ссылки rvalue? - PullRequest
13 голосов
/ 28 июля 2011

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

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

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

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

1 Ответ

14 голосов
/ 28 июля 2011

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

...