La asignación de Rvalue regresó de la función a otro Rvalue

class Test {

public:

    int n1;

};

Test func() {

    return Test();

}

int main() {

    func() = Test();

}

Esto no tiene sentido para mí. ¿Cómo y por qué se permite esto? ¿Es un comportamiento indefinido? Si una función devuelve un valor r, entonces, ¿cómo es posible establecer un valor r en otro valor r? Si lo intentara con algún tipo primitivo, me daría un error como esperaba.

Sé que los valores son un lugar en la memoria, por lo que la función está creando un valor temporal (¿valor?) Y asignándolo a otro valor? ¿Alguien puede explicar cómo funciona esta sintaxis?

Respuestas a la pregunta(2)

Su respuesta a la pregunta