in dispenso/concurrent_vector.h [559:579]
iterator erase(const_iterator first, const_iterator last) {
size_t len = std::distance(first, last);
auto it = begin();
size_t startIdx = first - it;
if (len == 0) {
return it + (startIdx + len);
}
it += startIdx;
auto e_it = std::move(last, cend(), it);
if (e_it < last) {
// remove any values that were not already moved into
do {
--last;
last->~T();
} while (e_it != last);
}
size_.fetch_sub(len, std::memory_order_relaxed);
return e_it;
}