Ответ 1
В таблице 28 указано, что одним из требований распределителя является то, что deallocate()
"Не выбрасывает исключения". Таким образом, стандарт может сделать утверждение о erase()
, clear()
, pop_back()
и pop_front()
С++ 11 §23.2.1.10 указывает:
Если не указано иное, определены все типы контейнеров в этом разделе отвечают следующим дополнительным требованиям:
- если исключение генерируется функцией insert() или emplace() при вставке одного элемента, эта функция не имеет эффектов.
- Функция erase(), clear(), pop_back() или pop_front() генерирует исключение.
Что касается первого пункта, как контейнер гарантирует это?
Конструктор для T
может иметь побочные эффекты. Если это не " не влияет на контейнер"
Что касается второй точки, она обычно вызывает allocator::deallocate(T*,size_t)
, которая не является noexcept
. Почему следует исключать возможные исключения?
В таблице 28 указано, что одним из требований распределителя является то, что deallocate()
"Не выбрасывает исключения". Таким образом, стандарт может сделать утверждение о erase()
, clear()
, pop_back()
и pop_front()