Atribuindo Rvalue retornado da função para outro Rvalue
class Test {
public:
int n1;
};
Test func() {
return Test();
}
int main() {
func() = Test();
}
Isso não faz sentido para mim. Como e por que isso é permitido? É um comportamento indefinido? Se uma função retorna um rvalue, como é possível definir um rvalue para outro rvalue? Se eu tentasse isso com qualquer tipo primitivo, isso me daria um erro como eu esperava.
Eu sei que lvalues é um lugar na memória, então a função está criando um lvalue temporário (rvalue?) E atribuindo-o a outro lvalue? Alguém pode explicar como essa sintaxe funciona?