template <class S>
class Iterator {
public:
  S stack;
  void advance() { stack.push(0); }
};
template <class T>
class Stack {
public:
  T *t;
  int sp;
  void push(const T &e) { t[sp++] = e; }
  void push() { t[sp++] = (T)0; }
};
int main() { Iterator< Stack<int> > i; i.advance(); return 0; }