从N3797开始,swap除非另有说明,否则C++标准要求容器函数不抛出任何异常[container.requirements.general](23.2.1§10).
swap指定的成员函数不抛出未声明noexcept?同样的问题适用于专门的非成员swap重载.
注:最初由问马特·麦克纳布的评论上为什么能交换标准库容器在C++ 11(包括分配器)是有问题的?.
标准(N3797)说,如果progagate_on_container_swap内部分配器是std::false_type它会产生不确定的行为,如果涉及的两个分配器不比较平等的.
23.2.1p9一般集装箱要求[container.requirements.general]如果
allocator_traits<allocator_type>::propagate_on_container_swap::value是true,那么也应该使用对非成员的未经授权的呼叫来交换a和的分配器.否则,它们不应被交换,并且行为是未定义的,除非.bswapa.get_allocator() == b.get_allocator()