Eu descobri que é S{}.rval
uma expressão lvalue. Quero saber a lógica por trás de considerá-la uma expressão lvalue.
Por que o acesso ao membro não estático do tipo de referência é lvalue, mesmo quando o objeto é um rvalue?
struct S {
int val;
int& rval = val;
};
int main() {
S{}.val; // xvalue
S{}.rval; // lvalue
}
Minha expectativa seria que uma referência a uma "entidade que morrerá em breve" também seria "morrerá em breve". Então, eu gostaria de entender a lógica da(s) regra(s).
Isso não é sempre verdade. O membro de referência pode apelidar um objeto que sobreviverá ao temporário
S{}
.Por exemplo: