Привет!
Почему вот этот код работает
class Some {
};
Some func1() {
Some some;
return some;
}
int main() {
Some some2;
func1() = some2;
}
а этот не компилируется?
int func2(int x) {
return x*x;
}
int main() {
func2(1) = 0;
}
Ведь по сути дела одно и то же...
Встроенный оператор присваивания требует (modifiable) lvalue слева.
А присваивание для классов это вызов метода. Генерируемый компилятором не имеет ref-квалификаторов и может вызываться объектов, обозначаемых prvalue- (до C++17)/xvalue- (после C++17, после temporary materialization) выражений.