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