|Push_back doesn’t strictly
follow exception-safety requirements. If it fails, it still modifies its
argument (deletes the pointer). I would argue that this is very reasonable
behavior in the case of auto_ptrs. They are supposed to release their
resource in the case of failure.
|Pop_back syntax differs from
the ususal pop_back syntax, which is not supposed to return anything. Again,
this makes perfect sense for auto_ptrs. The (rather unconventional) division
of responsibilities between pop_back() and back() in standard containers is
done in the name of exception safety. Here, instead, the conventional pop
syntax is exception safe. Incidentally, auto_vector::back() returns a
pointer, not auto_ptr.