Listing 1

template<typename T>
class AbstractStack {
public:
  typedef Item T;
  virtual ~AbstractStack() { }
  virtual void Push(std::auto_ptr<Item> x) = 0;
  virtual std::auto_ptr<Item> Pop() = 0;
  virtual bool IsEmpty() = 0;
};