Listing 3

template<typename T, int N>
class FixedStack : AbstractStack {
public:
  FixedStack() : cur(0) { }
  ~FixedStack() { while (!IsEmpty()) Pop(); }
  void Push(std::auto_ptr<Item> x) { m.push_back(x.release()); }
  std::auto_ptr<Item> Pop() { assert(cur > 0); 
         std::auto_ptr<Item> x = m[cur-1]; m.pop_back(); return m; }
  bool IsEmpty() { return cur == 0; }
private:
  int cur;
  Item* m[N];
};