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?

questionAnswers(2)

yourAnswerToTheQuestion