#include <iostream>
template <typename T>
class my_smart_pointer
{
public:
my_smart_pointer() { pt = nullptr; }
my_smart_pointer(T* p) { pt = p; }
T& operator*() { return *pt; }
const T& operator*() const { return *pt; }
private:
T* pt;
};
int main()
{
my_smart_pointer<int> pi;
my_smart_pointer<int> pj { new int(42) };
// std::cout << *pi << '\n';
std::cout << *pj << '\n';
}
I2luY2x1ZGUgPGlvc3RyZWFtPgoKdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CmNsYXNzIG15X3NtYXJ0X3BvaW50ZXIKewpwdWJsaWM6CglteV9zbWFydF9wb2ludGVyKCkgICAgICAgICB7IHB0ID0gbnVsbHB0cjsgfQoJbXlfc21hcnRfcG9pbnRlcihUKiBwKSAgICAgeyBwdCA9IHA7IH0KCglUJiBvcGVyYXRvciooKSAgICAgICAgICAgICB7IHJldHVybiAqcHQ7IH0KCWNvbnN0IFQmIG9wZXJhdG9yKigpIGNvbnN0IHsgcmV0dXJuICpwdDsgfQoKcHJpdmF0ZToKCVQqIHB0Owp9OwoKaW50IG1haW4oKQp7CglteV9zbWFydF9wb2ludGVyPGludD4gcGk7CglteV9zbWFydF9wb2ludGVyPGludD4gcGogeyBuZXcgaW50KDQyKSB9OwoKLy8Jc3RkOjpjb3V0IDw8ICpwaSA8PCAnXG4nOwoJc3RkOjpjb3V0IDw8ICpwaiA8PCAnXG4nOwp9Cg==