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];
};