#include <iostream>
//
// 危険なコード
// デストラクタが呼ばれた後のオブジェクトを参照している
//
struct something
{
int a = 0;
int& get() { return ( a ); }
~something() { std::cout << "destructor" << std::endl; }
};
int main()
{
int& n = something().get();
// n is destructed.
std::cout << n << std::endl; // oops!
}
I2luY2x1ZGUgPGlvc3RyZWFtPgoKLy8KLy8g5Y2x6Zm644Gq44Kz44O844OJCi8vIOODh+OCueODiOODqeOCr+OCv+OBjOWRvOOBsOOCjOOBn+W+jOOBruOCquODluOCuOOCp+OCr+ODiOOCkuWPgueFp+OBl+OBpuOBhOOCiwovLwoKc3RydWN0IHNvbWV0aGluZwp7CiAgaW50IGEgPSAwOwogIGludCYgZ2V0KCkgeyByZXR1cm4gKCBhICk7IH0KICB+c29tZXRoaW5nKCkgeyBzdGQ6OmNvdXQgPDwgImRlc3RydWN0b3IiIDw8IHN0ZDo6ZW5kbDsgfQp9OwoKaW50IG1haW4oKQp7CiAgaW50JiBuID0gc29tZXRoaW5nKCkuZ2V0KCk7CiAgLy8gbiBpcyBkZXN0cnVjdGVkLgogIHN0ZDo6Y291dCA8PCBuIDw8IHN0ZDo6ZW5kbDsgLy8gb29wcyEKfQo=