std::auto_ptr() に operator!() や operator T*() が無いのは何故でしょうか。
暗黙の変換による予期せぬ動作を避けるためですか?

生ポインタを使った既存コードを、例外フリーにするため auto_ptr に変更中ですが、
p => p.get() の書き換えが大量に必要になるため、以下のラッパークラスで処理する
ことを考えています。
template<class T> class my_auto_ptr : public std::auto_ptr<T> {
public:
explicit my_auto_ptr(T* p = 0) : std::auto_ptr<T>(p) {}
bool operator!() const { return get() == NULL; }
operator T*() const { return get(); }
};
これで問題が起こるケースは、my_auto_ptr<T> p(...); delete p; にて二重デリート、
が思いつきますが、他にありますでしょうか。