#include <iostream>
using namespace std;
class Test {
public:
Test() { cout << "Test()\n"; }
Test(int x):val_(x){ cout << "Test(" << x << ")\n"; }
Test(const Test& t):val_(t.val_) { cout << "Test(const Test& " << t.val_ << ")\n"; }
Test(Test&&t) :val_(t.val_) { t.val_ = 0; cout << "Test(const Test&& " << t.val_ << ")\n"; }
Test& operator = (const Test& t) {
cout << "Test& operator = (const Test& " << t.val_ <<")\n";
val_ = t.val_;
return *this;}
Test& operator = (Test&& t) {
cout << "Test& operator = (const Test&&" << t.val_ <<")\n";
val_ = t.val_; t.val_ = 0;
return *this;}
~Test() { cout << "~Test(" << val_ <<")\n"; }
int val() const { return val_; }
private:
int val_ = 0;
};
int main(int argc, const char * argv[])
{
long long L, M;
Test * t = reinterpret_cast<Test*>(&L);
*t = Test(5);
cout << "t->val() = " << t->val() << endl;
cout << "-------\n";
Test * u = new(&M) Test(6);
cout << "u->val() = " << u->val() << endl;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgoKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCmNsYXNzIFRlc3QgewpwdWJsaWM6CiAgICBUZXN0KCkgICAgICAgICAgICAgeyBjb3V0IDw8ICJUZXN0KClcbiI7IH0KICAgIFRlc3QoaW50IHgpOnZhbF8oeCl7IGNvdXQgPDwgIlRlc3QoIiA8PCB4IDw8ICIpXG4iOyB9CiAgICBUZXN0KGNvbnN0IFRlc3QmIHQpOnZhbF8odC52YWxfKSB7IGNvdXQgPDwgIlRlc3QoY29uc3QgVGVzdCYgIiA8PCB0LnZhbF8gPDwgIilcbiI7IH0KICAgIFRlc3QoVGVzdCYmdCkgICAgICA6dmFsXyh0LnZhbF8pIHsgdC52YWxfID0gMDsgY291dCA8PCAiVGVzdChjb25zdCBUZXN0JiYgIiA8PCB0LnZhbF8gPDwgIilcbiI7IH0KICAgIFRlc3QmIG9wZXJhdG9yID0gKGNvbnN0IFRlc3QmIHQpICB7CiAgICAgICAgY291dCA8PCAiVGVzdCYgb3BlcmF0b3IgPSAoY29uc3QgVGVzdCYgIiA8PCB0LnZhbF8gPDwiKVxuIjsKICAgICAgICB2YWxfID0gdC52YWxfOwogICAgICAgIHJldHVybiAqdGhpczt9CiAgICBUZXN0JiBvcGVyYXRvciA9IChUZXN0JiYgdCkgewogICAgICAgIGNvdXQgPDwgIlRlc3QmIG9wZXJhdG9yID0gKGNvbnN0IFRlc3QmJiIgPDwgdC52YWxfIDw8IilcbiI7CiAgICAgICAgdmFsXyA9IHQudmFsXzsgdC52YWxfID0gMDsKICAgICAgICByZXR1cm4gKnRoaXM7fQogICAgflRlc3QoKSAgICAgICAgICAgeyBjb3V0IDw8ICJ+VGVzdCgiIDw8IHZhbF8gPDwiKVxuIjsgfQogICAgaW50IHZhbCgpIGNvbnN0IHsgcmV0dXJuIHZhbF87IH0KcHJpdmF0ZToKICAgIGludCB2YWxfID0gMDsKfTsKCgppbnQgbWFpbihpbnQgYXJnYywgY29uc3QgY2hhciAqIGFyZ3ZbXSkKewogICAgbG9uZyBsb25nIEwsIE07CiAgICBUZXN0ICogdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8VGVzdCo+KCZMKTsKICAgICp0ID0gVGVzdCg1KTsKICAgIGNvdXQgPDwgInQtPnZhbCgpID0gIiA8PCB0LT52YWwoKSA8PCBlbmRsOwogICAgY291dCA8PCAiLS0tLS0tLVxuIjsKCiAgICBUZXN0ICogdSA9IG5ldygmTSkgVGVzdCg2KTsKICAgIGNvdXQgPDwgInUtPnZhbCgpID0gIiA8PCB1LT52YWwoKSA8PCBlbmRsOwoKfQoK