#include <iostream>
struct Foo
{
Foo() { std::cout << "Foo()\n";}
Foo(const Foo&) { std::cout << "Foo(const Foo&)\n";}
//Foo(Foo&&) { std::cout << "Foo(Foo&&)\n";}
Foo& operator=(const Foo&) {
std::cout << "Foo& operator=(const Foo&)\n";
return *this;
}
};
Foo operator+(const Foo&, const Foo&) { return Foo(); }
int main()
{
Foo f1, f2, f3;
f1 = f2 + f3;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgoKc3RydWN0IEZvbwp7CiAgRm9vKCkgeyBzdGQ6OmNvdXQgPDwgIkZvbygpXG4iO30KICBGb28oY29uc3QgRm9vJikgeyBzdGQ6OmNvdXQgPDwgIkZvbyhjb25zdCBGb28mKVxuIjt9CiAgLy9Gb28oRm9vJiYpIHsgc3RkOjpjb3V0IDw8ICJGb28oRm9vJiYpXG4iO30KICBGb28mIG9wZXJhdG9yPShjb25zdCBGb28mKSB7IAogICAgc3RkOjpjb3V0IDw8ICJGb28mIG9wZXJhdG9yPShjb25zdCBGb28mKVxuIjsKICAgIHJldHVybiAqdGhpczsKICB9Cn07CkZvbyBvcGVyYXRvcisoY29uc3QgRm9vJiwgY29uc3QgRm9vJikgeyByZXR1cm4gRm9vKCk7IH0KCmludCBtYWluKCkKewogIEZvbyBmMSwgZjIsIGYzOwogIGYxID0gZjIgKyBmMzsKfQo=