class Foo {
private:
int a;
int b;
public:
Foo(int _a, int _b): a(_a), b(_b){}
Foo operator + (const Foo &other) const {
return Foo(a + other.a, b + other.b);
}
};
class Bar {
private:
int a;
int b;
public:
Bar(int _a, int _b): a(_a), b(_b){}
friend Bar operator + (const Bar &l, const Bar &r) {
return Bar(l.a + r.a, l.b + r.b);
}
};
int main() {
const Foo a(1,2);
const Foo b(3,4);
const Foo c = a + b;
const Bar d(1,2);
const Bar e(3,4);
const Bar f = d + e;
return 0;
}
Y2xhc3MgRm9vIHsKCXByaXZhdGU6CgkJaW50IGE7CgkJaW50IGI7CglwdWJsaWM6CgkJRm9vKGludCBfYSwgaW50IF9iKTogYShfYSksIGIoX2Ipe30KCQlGb28gb3BlcmF0b3IgKyAoY29uc3QgRm9vICZvdGhlcikgY29uc3QgewoJCQlyZXR1cm4gRm9vKGEgKyBvdGhlci5hLCBiICsgb3RoZXIuYik7CgkJfQp9OwoKY2xhc3MgQmFyIHsKCXByaXZhdGU6CgkJaW50IGE7CgkJaW50IGI7CglwdWJsaWM6CgkJQmFyKGludCBfYSwgaW50IF9iKTogYShfYSksIGIoX2Ipe30KCQlmcmllbmQgQmFyIG9wZXJhdG9yICsgKGNvbnN0IEJhciAmbCwgY29uc3QgQmFyICZyKSB7CiAgICAgICAgICAgIHJldHVybiBCYXIobC5hICsgci5hLCBsLmIgKyByLmIpOwogICAgICAgIH0KfTsKCgppbnQgbWFpbigpIHsKCgljb25zdCBGb28gYSgxLDIpOwoJY29uc3QgRm9vIGIoMyw0KTsKCWNvbnN0IEZvbyBjID0gYSArIGI7CgogICAgY29uc3QgQmFyIGQoMSwyKTsKICAgIGNvbnN0IEJhciBlKDMsNCk7CiAgICBjb25zdCBCYXIgZiA9IGQgKyBlOwoKCXJldHVybiAwOwp9Cg==