#include <iostream>
using namespace std;
class Foo {
int* data;
public:
Foo() : data(new int[1000]) {};
Foo& operator= (Foo&){
cout << "Foo&" << endl;
return *this;
}
Foo& operator= (Foo&& foo){
if (this == &foo) cout << "bad parameter";
cout << "Foo&&" << endl;
data = foo.data;
foo.data = 0;
return *this;
}
~Foo(){
delete[] data;
}
};
int main(){
Foo foo1, foo2;
foo1 = Foo();
Foo* ptr = &foo2;
foo2 = foo2;
foo2 = *(ptr+0);
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKY2xhc3MgRm9vIHsKICAgIGludCogZGF0YTsKcHVibGljOgogICAgRm9vKCkgOiBkYXRhKG5ldyBpbnRbMTAwMF0pIHt9OwoKICAgIEZvbyYgb3BlcmF0b3I9IChGb28mKXsKICAgICAgICBjb3V0IDw8ICJGb28mIiA8PCBlbmRsOwogICAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAgICBGb28mIG9wZXJhdG9yPSAoRm9vJiYgZm9vKXsKICAgICAgICBpZiAodGhpcyA9PSAmZm9vKSBjb3V0IDw8ICJiYWQgcGFyYW1ldGVyIjsKICAgICAgICBjb3V0IDw8ICJGb28mJiIgPDwgZW5kbDsKICAgICAgICBkYXRhID0gZm9vLmRhdGE7CiAgICAgICAgZm9vLmRhdGEgPSAwOwogICAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAgICB+Rm9vKCl7CiAgICAgICAgZGVsZXRlW10gZGF0YTsKICAgIH0KfTsKCmludCBtYWluKCl7CiAgICBGb28gZm9vMSwgZm9vMjsKICAgIGZvbzEgPSBGb28oKTsKCiAgICBGb28qIHB0ciA9ICZmb28yOwoKICAgIGZvbzIgPSBmb28yOwoKICAgIGZvbzIgPSAqKHB0ciswKTsKCiAgICByZXR1cm4gMDsKfQo=