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