#include <iostream>
template <typename T>
class my_auto_ptr
{
my_auto_ptr() = delete;
my_auto_ptr(my_auto_ptr& rhs) = delete;
my_auto_ptr& operator=(my_auto_ptr& rhs) = delete;
T* pt;
public:
my_auto_ptr(T* p) { pt = p; }
~my_auto_ptr() { delete pt; }
T& operator*() { return *pt; }
const T& operator*() const { return *pt; };
T* operator->() { return pt; }
const T*& operator->() const { return pt; };
};
int main()
{
my_auto_ptr<int> pi { new int(42) };
*pi = 42;
std::cout << *pi << '\n';
}
I2luY2x1ZGUgPGlvc3RyZWFtPgoKdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CmNsYXNzIG15X2F1dG9fcHRyCnsKICAgICAgICBteV9hdXRvX3B0cigpID0gZGVsZXRlOwogICAgICAgIG15X2F1dG9fcHRyKG15X2F1dG9fcHRyJiByaHMpID0gZGVsZXRlOwogICAgICAgIG15X2F1dG9fcHRyJiBvcGVyYXRvcj0obXlfYXV0b19wdHImIHJocykgPSBkZWxldGU7CgogICAgICAgIFQqIHB0OwoKcHVibGljOgogICAgICAgIG15X2F1dG9fcHRyKFQqIHApIHsgcHQgPSBwOyB9CiAgICAgICAgfm15X2F1dG9fcHRyKCkgeyBkZWxldGUgcHQ7IH0KCiAgICAgICAgVCYgb3BlcmF0b3IqKCkgeyByZXR1cm4gKnB0OyB9CiAgICAgICAgY29uc3QgVCYgb3BlcmF0b3IqKCkgY29uc3QgeyByZXR1cm4gKnB0OyB9OwoKICAgICAgICBUKiBvcGVyYXRvci0+KCkgeyByZXR1cm4gcHQ7IH0KICAgICAgICBjb25zdCBUKiYgb3BlcmF0b3ItPigpIGNvbnN0IHsgcmV0dXJuIHB0OyB9Owp9OwoKaW50IG1haW4oKQp7CiAgICAgICAgbXlfYXV0b19wdHI8aW50PiBwaSB7IG5ldyBpbnQoNDIpIH07CgogICAgICAgICpwaSA9IDQyOwoKICAgICAgICBzdGQ6OmNvdXQgPDwgKnBpIDw8ICdcbic7Cn0=