Ответ 1
Тип x
(переменной) - int&&
. Итак, decltype(x)
дает int&&
. Тип выражения x
равен int
. Если выражение является lvalue, decltype((x))
дает ссылку lvalue для типа выражения. Итак, decltype((x))
дает int&
.
Рассмотрим следующий код:
int&& x = 42;
static_assert(std::is_same<decltype( x ), int&&>::value, "&&");
static_assert(std::is_same<decltype((x)), int& >::value, "&" );
Итак, каков тип x
? Это int&&
или int&
?
(Я задал себе этот вопрос, прочитав этот ответ.)
Тип x
(переменной) - int&&
. Итак, decltype(x)
дает int&&
. Тип выражения x
равен int
. Если выражение является lvalue, decltype((x))
дает ссылку lvalue для типа выражения. Итак, decltype((x))
дает int&
.