#include <iostream>
template < typename T = char >
class smart_pointer
{
public :
smart_pointer( ) : pt ( nullptr) { }
smart_pointer( T * new_pt) : pt ( new_pt) { }
T& operator* ( ) { return * pt; }
const T& operator* ( ) const { return * pt; }
private :
T* pt;
} ;
int main( )
{
smart_pointer sp;
smart_pointer< int > pi = new int ( 42 ) ;
smart_pointer< float > pf = new float ( 3.14f ) ;
// std::cout << sp << '\n';
std:: cout << * pi << '\n ' ;
std:: cout << * pf << '\n ' ;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgoKdGVtcGxhdGUgPHR5cGVuYW1lIFQgPSBjaGFyPgpjbGFzcyBzbWFydF9wb2ludGVyCnsKcHVibGljOgoJc21hcnRfcG9pbnRlcigpICAgICAgICAgIDogcHQgKG51bGxwdHIpIHt9CglzbWFydF9wb2ludGVyKFQgKm5ld19wdCkgOiBwdCAobmV3X3B0KSAge30KCgkgICAgICBUJiBvcGVyYXRvciooKSAgICAgICAgeyByZXR1cm4gKnB0OyB9Cgljb25zdCBUJiBvcGVyYXRvciooKSBjb25zdCAgeyByZXR1cm4gKnB0OyB9Cgpwcml2YXRlOgoJVCogcHQ7Cn07CgppbnQgbWFpbigpCnsKCXNtYXJ0X3BvaW50ZXIgc3A7CglzbWFydF9wb2ludGVyPGludD4gcGkgICA9IG5ldyBpbnQgKDQyKTsKCXNtYXJ0X3BvaW50ZXI8ZmxvYXQ+IHBmID0gbmV3IGZsb2F0ICgzLjE0Zik7CgovLwlzdGQ6OmNvdXQgPDwgc3AgPDwgJ1xuJzsKCXN0ZDo6Y291dCA8PCAqcGkgPDwgJ1xuJzsKCXN0ZDo6Y291dCA8PCAqcGYgPDwgJ1xuJzsKfQo=