#include<iostream>
#include<utility>
class foo
{
public:
foo();
~foo();
foo(const foo& copy);
foo& operator=(const foo& rhs);
private:
void swap(foo left, foo right);
int* a;
int b;
double c;
};
foo::foo(const foo& copy)
{
a = new int;
a = *copy.a;
b = copy.b;
c = copy.c;
}
foo& foo::operator=(const foo& rhs)
{
std::swap(rhs, *this);
return *this;
}
void foo::swap(foo left, foo right)
{
using std::swap;
swap(left.a, right.a);
swap(left.b, right.b);
swap(left.c, right.c);
}
int main()
{
foo f;
return 0;
}
I2luY2x1ZGU8aW9zdHJlYW0+CiNpbmNsdWRlPHV0aWxpdHk+CgpjbGFzcyBmb28KewpwdWJsaWM6CmZvbygpOwp+Zm9vKCk7Cgpmb28oY29uc3QgZm9vJiBjb3B5KTsKCmZvbyYgb3BlcmF0b3I9KGNvbnN0IGZvbyYgcmhzKTsKCnByaXZhdGU6CnZvaWQgc3dhcChmb28gbGVmdCwgZm9vIHJpZ2h0KTsKCmludCogYTsKaW50IGI7CmRvdWJsZSBjOwoKfTsKCmZvbzo6Zm9vKGNvbnN0IGZvbyYgY29weSkKewogICAgYSA9IG5ldyBpbnQ7CiAgICBhID0gKmNvcHkuYTsKICAgIGIgPSBjb3B5LmI7CiAgICBjID0gY29weS5jOwp9Cgpmb28mIGZvbzo6b3BlcmF0b3I9KGNvbnN0IGZvbyYgcmhzKQp7CgpzdGQ6OnN3YXAocmhzLCAqdGhpcyk7CgpyZXR1cm4gKnRoaXM7Cn0KCnZvaWQgZm9vOjpzd2FwKGZvbyBsZWZ0LCBmb28gcmlnaHQpCnsKICAgdXNpbmcgc3RkOjpzd2FwOwoKICAgc3dhcChsZWZ0LmEsIHJpZ2h0LmEpOwogICBzd2FwKGxlZnQuYiwgcmlnaHQuYik7CiAgIHN3YXAobGVmdC5jLCByaWdodC5jKTsKfQoKaW50IG1haW4oKQp7Cgpmb28gZjsKCnJldHVybiAwOwp9