是否明确要求STL容器元素(noexcept)可破坏?

Cho*_*s-2 8 c++ stl c++11

C++ 11(和C++ 14)STL容器具有noexcept析构函数和clear()成员函数.

这意味着元素也应该具有noexcept析构函数,或者至少存储在容器中的实际元素在销毁时不应抛出任何异常 - 或者更准确地说,相应的allocator_traits<Allocator>::destroy调用不应抛出.

这是否在标准的任何地方指定为要求(明确或暗示另一个明确要求)?如果没有,为什么?

我知道is_nothrow_constructible需要一个noexcept析构函数,但is_constructible单独没有,并且容器需求是根据概念而不是类型特征模板指定的.

Igo*_*nik 7

17.6.4.8/1在某些情况下(替换函数,处理函数,用于实例化标准库模板组件的类型的操作),C++标准库依赖于C++程序提供的组件.如果这些组件不符合要求,则标准对实施没有要求.

17.6.4.8/2特别是,在下列情况下,效果未定义:

...

  • 如果任何替换函数或处理函数或析构函数操作通过异常退出,除非在适用的必需行为:段落中明确允许.