Этот вопрос спрашивает, все ли временные объекты являются rvalue.
Ответ отрицательный, потому что если мы рассмотрим это выражение:
const int &ri = 2 + 3;
затем тот же самый временный (2 + 3)
, который здесь является значением r, может использоваться как значение lvalue в последующем выражении:
const int *pi = &ri;
так что это временное значение не (только) rvalue.
Тогда логическое утверждение temporary ==> rvalue
ложно.
Однако мы не можем написать
const int &ri = &(2 + 3); // illegal, 2 + 3 -> temporary -> rvalue
or
int *i = &4; // illegal, 4 is an rvalue (literal)
or
int foo();
int *i = &foo(); // illegal, foo() -> temporary -> rvalue
Таким образом, мой вопрос: можем ли мы сгенерировать rvalue в определенном выражении без временного или литерального значения? rvalue ==> (temporary or literal)
правда?