#include <iostream>
using namespace std;
class Point
{
public:
Point()
: mX(0)
, mY(0)
{
cout << "Point()" << endl;
}
Point(int x, int y)
: mX(x)
, mY(y)
{
cout << "Point(int x, int y)" << endl;
}
Point & operator=(const Point & point)
{
cout << "Point & operator=(const Point & point)" << endl;
if (this == &point)
{
return *this;
}
mX = point.getX();
mY = point.getY();
return *this;
}
Point(const Point & point)
{
cout << "Point(const Point & point)" << endl;
*this = point;
}
Point(Point&& point) noexcept
: mX(point.getX())
, mY(point.getY())
{
cout << "Point(Point&& point) noexcept" << endl;
}
Point & operator=(Point && point)
{
cout << "Point & operator=(Point && point)" << endl;
if (this != &point)
{
mX = point.getX();
mY = point.getY();
}
return *this;
}
int getX() const
{
return mX;
}
int getY() const
{
return mY;
}
private:
int mX;
int mY;
};
Point func()
{
Point t(1, 1);
return t;
}
int main() {
// your code goes here
Point p = func();
cout << p.getX() << " " << p.getY() << endl;
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKY2xhc3MgUG9pbnQKewpwdWJsaWM6CglQb2ludCgpCgkJOiBtWCgwKQoJCSwgbVkoMCkKCXsKCQljb3V0IDw8ICJQb2ludCgpIiA8PCBlbmRsOwoJfQoKCVBvaW50KGludCB4LCBpbnQgeSkKCQk6IG1YKHgpCgkJLCBtWSh5KQoJewoJCWNvdXQgPDwgIlBvaW50KGludCB4LCBpbnQgeSkiIDw8IGVuZGw7Cgl9CgoJUG9pbnQgJiBvcGVyYXRvcj0oY29uc3QgUG9pbnQgJiBwb2ludCkKCXsKCQljb3V0IDw8ICJQb2ludCAmIG9wZXJhdG9yPShjb25zdCBQb2ludCAmIHBvaW50KSIgPDwgZW5kbDsKCQlpZiAodGhpcyA9PSAmcG9pbnQpCiAgICAgICAgewogICAgICAgICAgICByZXR1cm4gKnRoaXM7CiAgICAgICAgfQogICAgICAgIG1YID0gcG9pbnQuZ2V0WCgpOwogICAgICAgIG1ZID0gcG9pbnQuZ2V0WSgpOwogICAgICAgIHJldHVybiAqdGhpczsKCgl9CgkKCVBvaW50KGNvbnN0IFBvaW50ICYgcG9pbnQpCgl7CgkJY291dCA8PCAiUG9pbnQoY29uc3QgUG9pbnQgJiBwb2ludCkiIDw8IGVuZGw7CiAgICAgICAgKnRoaXMgPSBwb2ludDsKCX0KCQoJUG9pbnQoUG9pbnQmJiBwb2ludCkgbm9leGNlcHQKICAgICAgICA6IG1YKHBvaW50LmdldFgoKSkKICAgICAgICAsIG1ZKHBvaW50LmdldFkoKSkKCXsKCQljb3V0IDw8ICJQb2ludChQb2ludCYmIHBvaW50KSBub2V4Y2VwdCIgPDwgZW5kbDsKCX0KCglQb2ludCAmIG9wZXJhdG9yPShQb2ludCAmJiBwb2ludCkKCXsKCQljb3V0IDw8ICJQb2ludCAmIG9wZXJhdG9yPShQb2ludCAmJiBwb2ludCkiIDw8IGVuZGw7CiAgICAgICAgaWYgKHRoaXMgIT0gJnBvaW50KQogICAgICAgIHsKICAgICAgICAgICAgbVggPSBwb2ludC5nZXRYKCk7CiAgICAgICAgICAgIG1ZID0gcG9pbnQuZ2V0WSgpOwogICAgICAgIH0KICAgICAgICByZXR1cm4gKnRoaXM7Cgl9CgkKCWludCBnZXRYKCkgY29uc3QKCXsKCQlyZXR1cm4gbVg7Cgl9CgoJaW50IGdldFkoKSBjb25zdAoJewoJCXJldHVybiBtWTsKCX0KCQpwcml2YXRlOgogICAgaW50IG1YOwogICAgaW50IG1ZOwp9OwoKUG9pbnQgZnVuYygpCnsKCVBvaW50IHQoMSwgMSk7CglyZXR1cm4gdDsKfQoKaW50IG1haW4oKSB7CgkvLyB5b3VyIGNvZGUgZ29lcyBoZXJlCglQb2ludCBwID0gZnVuYygpOwoJY291dCA8PCBwLmdldFgoKSA8PCAiICIgPDwgcC5nZXRZKCkgPDwgZW5kbDsKCXJldHVybiAwOwp9