class Test {
public:
    Test& operator*(Test);
    Test& operator=(Test&);
};

int main() {
    Test t1, t2, t3;
    t1 = t2 * t3;
}


대충 이런 구조로 코드를 짜야 한다고 가정했을 때(선언은 수정 불가)


1. t2 * t3는 계산 결과로 rvalue가 나와야 하는 거 아님? operator*가 lvalue 참조를 리턴하려면 결국 t2나 t3 중 하나를 수정해야 하는 거 아닌가.. 함수 내부에서 객체를 새로 만들어서 리턴하면 어차피 dangling reference인데


2. operator=를 오버로딩할 때 파라미터로 참조를 받으면 rvalue인 t2 * t3가 operator=의 피연산자가 될 수 없지 않음? (const lvalue reference로 수정 안됨) 1번에 말했던 operator*에서 참조를 리턴하면 상관없긴 한데 그러려면 결국 operator*가 피연산자를 수정해야 하니까 내가 1번에서 물어본 부분이랑 겹침