#include <assert.h>

template <class T = int> class TreeIterator;

template <class T = int> class Tree {

public:

  T *root;

  void flush();

};

template <class T> class TreeIterator {

public:

  T *ptr;

  TreeIterator(const Tree<T> &tree) { ptr = tree.root; }

  TreeIterator(const TreeIterator<T> &); // { assert(0); }

};

template <class T>
void Tree<T>::flush() {

  TreeIterator<T> i = *this;

}

int main() {

  Tree<> t;
  TreeIterator<> i = t;
  // t.flush();

  return 0;

}