template< class Iter, int Level > struct iterator { typedef Iter type; typedef iterator next; next::type& next; mutable Iter iter_; Iter& base() const { return iter_; } }; template< class Iter, class Boxed > Iter unbox( const Boxed& b ) { } #include int main() { std::vector v; typedef std::vector::iterator iter; iterator i; iter ii = i; iterator< iterator > iii; iter iiii = iii; }