あとね
auto_ptr<D> d;
auto_ptr<B> b0(d); // OK
auto_ptr<B> b1 = d; // NG
なのよ。

auto_ptr<B> b2(auto_ptr<D>());
はfunction declarationになっちゃうからいいんだけど。