+ template<typename T>\r
+ TYPENAME ntree<T>::iterator ntree<T>::move(ntree<T>& tree)\r
+ {\r
+ // insert a whole tree as root, removing it from source\r
+ erase();\r
+ m_root = tree.m_root;\r
+ tree.m_root = 0;\r
+ if (m_root) m_root->change_owner(this);\r
+ return ntree_iterator<T,T&,T*>(m_root);\r
+ }\r
+\r
+ template<typename T>\r
+ TYPENAME ntree<T>::iterator ntree<T>::move(const TYPENAME ntree<T>::iterator& i, unsigned offset, ntree<T>& tree)\r
+ throw(wrong_object,null_dereference,end_dereference,std::out_of_range)\r
+ {\r
+ // insert a whole tree as a child of i\r
+ i.assert_valid(this);\r
+ if (offset > children(i)) throw std::out_of_range("stlplus::ntree");\r
+ ntree_node<T>* new_node = tree.m_root;\r
+ tree.m_root = 0;\r
+ if (new_node) new_node->change_owner(this);\r
+ i.node()->m_children.insert(i.node()->m_children.begin()+offset,new_node);\r
+ new_node->m_parent = i.node();\r
+ return ntree_iterator<T,T&,T*>(new_node);\r
+ }\r
+\r
+ template<typename T>\r
+ TYPENAME ntree<T>::iterator ntree<T>::move(const TYPENAME ntree<T>::iterator& i, ntree<T>& tree)\r
+ throw(wrong_object,null_dereference,end_dereference)\r
+ {\r
+ return move(i, children(i), tree);\r
+ }\r
+\r