Listing 2: Revised auto_ptr

template<class t>
class auto_pointer
    {
public:
    ~auto_pointer();
    auto_pointer(t * = NULL); // changed
    auto_pointer(const auto_pointer &);
    auto_pointer &operator=
        (const auto_pointer &);
    operator t *() const; // replaces get 
    t **operator&(); // new
    t * const *operator&() const; // new 
    t& operator*() const;
    t* operator->() const;
    t* release() const;
private:
    mutable bool is_owner_;
    t *pointer_;
    };
//End of File