为什么 std::vector::swap 具有与所有其他容器交换函数不同的 noexcept 规范?

LoS*_*LoS 23 c++ swap stdvector noexcept c++17

我注意到std::vector容器的交换函数具有与所有其他容器不同的 noexcept 规范。具体来说,如果表达式 std::allocator_traits<Allocator>::propagate_on_container_swap || std::allocator_traits<Allocator>::is_always_equal为 true,则该函数为 no except,但其他容器要求表达式std::allocator_traits<Allocator>::is_always_equal为 true。

既然交换函数的行为是相同的,为什么 noexcept 规范仅在std::vector容器中不同?