#include <iostream>
#include <cassert>
#include <cstring>
#include <cstdlib>
#include <algorithm>
typedef struct complex
{
complex(double re, double im)
: re(re), im(im) {}
void swap(complex & other);
complex & operator=(complex const& other);
void print();
private:
double re;
double im;
} complex;
void complex::swap(complex & other)
{
using std::swap;
swap(re, other.re);
swap(im, other.im);
}
complex & complex::operator=(complex const& other)
{
if (this != &other)
complex(other).swap(*this);
return *this;
}
void complex::print()
{
std::cout << re << ", " << im << std::endl;
}
int main()
{
complex x(0, 1);
complex y(0, -1);
x.print();
y.print();
x = y;
x.print();
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8Y2Fzc2VydD4KI2luY2x1ZGUgPGNzdHJpbmc+CiNpbmNsdWRlIDxjc3RkbGliPgojaW5jbHVkZSA8YWxnb3JpdGhtPgoKCnR5cGVkZWYgc3RydWN0IGNvbXBsZXgKewoJY29tcGxleChkb3VibGUgcmUsIGRvdWJsZSBpbSkKCQk6IHJlKHJlKSwgaW0oaW0pIHt9Cgl2b2lkIHN3YXAoY29tcGxleCAmIG90aGVyKTsKCWNvbXBsZXggJiBvcGVyYXRvcj0oY29tcGxleCBjb25zdCYgb3RoZXIpOwoJdm9pZCBwcmludCgpOwpwcml2YXRlOgoJZG91YmxlIHJlOwoJZG91YmxlIGltOwp9IGNvbXBsZXg7Cgp2b2lkIGNvbXBsZXg6OnN3YXAoY29tcGxleCAmIG90aGVyKQp7Cgl1c2luZyBzdGQ6OnN3YXA7Cglzd2FwKHJlLCBvdGhlci5yZSk7Cglzd2FwKGltLCBvdGhlci5pbSk7Cn0KCmNvbXBsZXggJiBjb21wbGV4OjpvcGVyYXRvcj0oY29tcGxleCBjb25zdCYgb3RoZXIpCnsKCWlmICh0aGlzICE9ICZvdGhlcikKCQljb21wbGV4KG90aGVyKS5zd2FwKCp0aGlzKTsKCXJldHVybiAqdGhpczsKfQoKdm9pZCBjb21wbGV4OjpwcmludCgpCnsKCXN0ZDo6Y291dCA8PCByZSA8PCAiLCAiIDw8IGltIDw8IHN0ZDo6ZW5kbDsKfQoKaW50IG1haW4oKQp7Cgljb21wbGV4IHgoMCwgMSk7Cgljb21wbGV4IHkoMCwgLTEpOwoKCXgucHJpbnQoKTsKCXkucHJpbnQoKTsKCgl4ID0geTsKCXgucHJpbnQoKTsKfQ==