'reverseiterator<std::_Vector_iterator<std::_Vector_val<int,std::allocator<int> > > >::operator++' : recursive on all control paths, function will cause runtime stack overflow
'reverseiterator<std::_Vector_iterator<std::_Vector_val<int,std::allocator<int> > > >::operator--' : recursive on all control paths, function will cause runtime stack overflow
func will call func, which calls func again, which calls it again, and again, and again, etc. It'll never stop calling itself which creates an infinite loop and eats up all your stack space until the program dies.
Your += and -= operators have the same problem.
Instead of having the operator call itself, you are supposed to implement what you want that operator to do. What does it mean to do ++obj;? Write the code that answers that question for that operator. Then do the same for --, +=, and -=.