> From: Yitzhak Sapir [mailto:yitzhaks@actimize.com]
> Most of us don't change <memory> on a regular basis.  So why
> is the dependency problematic?  What do you lose from it?  I
> would like to have this, but for me, this would be syntactic
> sugar, since I can accomplish the same thing with calling
> release() before passing it to the constructor.  Besides,
> standard library headers sometimes include a lot more than
> you might think they include.  I think dependencies should be
> few, but dependencies are not that bad when the element they
> depend on is pretty much constant.

I agree that the physical dependency from #including <memory> is a minor issue. The coupling between scoped_ptr and auto_ptr is a limitation because 0) scoped_ptr cannot exist without auto_ptr and 1) the client of scoped_ptr needs to understand auto_ptr (as of the rule "you'll pay for what you don't know, for sure").

For most of us, these are obviously non-issues, but it's still an increase in complexity. As much as I value syntactic sugar, I don't think that the code would become much clearer, which is why I don't think that scoped_ptr should know anything about auto_ptr. It's a minimalist tool.

> > Declare the auto_ptr const. This comes very close to the
> behavior of scoped_ptr, with the exception that you
> > can reset the scoped_ptr, but not the auto_ptr.
> And you force initialization in the constructor
> initialization list if it is a class member.

Yep, for those who are brave enough to use auto_ptrs as class members.