#include <iostream>
template <typename T>
class my_auto_ptr
{
public:
my_auto_ptr(T* xx = nullptr) { x = xx; }
~my_auto_ptr() { delete x; }
T& operator*() { return *x; }
private:
T* x;
};
int main()
{
my_auto_ptr<bool> pb (new bool(false));
my_auto_ptr<int> pi (new int(42));
my_auto_ptr<float> pf (new float(0.0));
*pb = true;
*pi = 43;
*pf = 3.14f;
std::cout << std::boolalpha << *pb << '\n';
std::cout << *pi << '\n';
std::cout << *pf << '\n';
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgoKdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CmNsYXNzIG15X2F1dG9fcHRyCnsKcHVibGljOgoJbXlfYXV0b19wdHIoVCogeHggPSBudWxscHRyKSB7IHggPSB4eDsgfQoJfm15X2F1dG9fcHRyKCkgeyBkZWxldGUgeDsgfQoKCVQmIG9wZXJhdG9yKigpIHsgcmV0dXJuICp4OyB9Cgpwcml2YXRlOgoJVCogeDsKfTsKCmludCBtYWluKCkKewogICAgbXlfYXV0b19wdHI8Ym9vbD4gIHBiIChuZXcgYm9vbChmYWxzZSkpOwogICAgbXlfYXV0b19wdHI8aW50PiAgIHBpIChuZXcgaW50KDQyKSk7CiAgICBteV9hdXRvX3B0cjxmbG9hdD4gcGYgKG5ldyBmbG9hdCgwLjApKTsKCiAgICAqcGIgPSB0cnVlOwogICAgKnBpID0gNDM7CiAgICAqcGYgPSAzLjE0ZjsKCiAgICBzdGQ6OmNvdXQgPDwgc3RkOjpib29sYWxwaGEgPDwgKnBiIDw8ICdcbic7CiAgICBzdGQ6OmNvdXQgPDwgKnBpIDw8ICdcbic7CiAgICBzdGQ6OmNvdXQgPDwgKnBmIDw8ICdcbic7CgogICAgcmV0dXJuIDA7Cn0=