Този въпрос пита дали всички временни елементи са rvalue.
Отговорът е не, защото ако разгледаме този израз:
const int &ri = 2 + 3;
след това същият временен (2 + 3)
, който тук е rvalue, може да се използва като 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)
?