Присвоение Rvalue, возвращенного из функции другому Rvalue

class Test {

public:

    int n1;

};

Test func() {

    return Test();

}

int main() {

    func() = Test();

}

Это не имеет смысла для меня. Как и почему это разрешено? Это неопределенное поведение? Если функция возвращает значение rvalue, то как можно установить значение rvalue для другого значения rvalue? Если бы я попробовал это с любыми примитивными типами, это дало бы мне ошибку, как я и ожидал.

Я знаю, что lvalue - это место в памяти, поэтому функция создает временное lvalue (rvalue?) И присваивает его другому lvalue? Может кто-нибудь объяснить, как работает этот синтаксис?