diff --git a/include/const_vector.hpp b/include/const_vector.hpp index 94b6f90..79b2b89 100644 --- a/include/const_vector.hpp +++ b/include/const_vector.hpp @@ -486,22 +486,29 @@ namespace cc { template constexpr const_vector::iterator const_vector::erase(const_vector::const_iterator pos) { - _erase_no_move(pos); - std::move(pos + 1, end(), pos); + auto it = const_cast(pos); + + std::destroy_n(it, 1); + std::move(it + 1, end(), it); --_size; - return pos; + return it; } template constexpr const_vector::iterator const_vector::erase(const_vector::const_iterator first, const_vector::const_iterator last) { - _erase_no_move(first, last); - std::move(last + 1, end(), first); - _size -= (last - first); + auto _first = const_cast(first); + auto _last = const_cast(last); + + if (_first == _last) return _last; + + std::destroy(_first, _last); + std::move(_last, end(), _first); + _size -= std::distance(_first, _last); - return first; + return _first; } template