#include <iostream>
#include <type_traits>
using namespace std;
struct NTC
{
int x;
NTC(int mX) : x(mX) { }
~NTC()
{
cout << "boop." << x << endl;
}
};
int main()
{
using AS = aligned_storage_t<sizeof(NTC), alignof(NTC)>;
AS as1, as2;
new (&as1) NTC{2};
new (&as2) NTC{5};
NTC& in1{*static_cast<NTC*>(static_cast<void*>(&as1))};
NTC& in2{*static_cast<NTC*>(static_cast<void*>(&as2))};
std::swap(in1, in2);
in1.~NTC();
in2.~NTC();
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dHlwZV90cmFpdHM+Cgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKc3RydWN0IE5UQwp7CglpbnQgeDsKCQoJTlRDKGludCBtWCkgOiB4KG1YKSB7IH0KCQoJfk5UQygpIAoJewoJCWNvdXQgPDwgImJvb3AuIiA8PCB4IDw8IGVuZGw7Cgl9Cn07CgoKCmludCBtYWluKCkgCnsKCXVzaW5nIEFTID0gYWxpZ25lZF9zdG9yYWdlX3Q8c2l6ZW9mKE5UQyksIGFsaWdub2YoTlRDKT47CgkKCUFTIGFzMSwgYXMyOwoJCgluZXcgKCZhczEpIE5UQ3syfTsKCW5ldyAoJmFzMikgTlRDezV9OwoJCglOVEMmIGluMXsqc3RhdGljX2Nhc3Q8TlRDKj4oc3RhdGljX2Nhc3Q8dm9pZCo+KCZhczEpKX07CglOVEMmIGluMnsqc3RhdGljX2Nhc3Q8TlRDKj4oc3RhdGljX2Nhc3Q8dm9pZCo+KCZhczIpKX07CgoJc3RkOjpzd2FwKGluMSwgaW4yKTsKCQoJaW4xLn5OVEMoKTsKCWluMi5+TlRDKCk7CgkKCXJldHVybiAwOwp9