Я заметил, что оператор присваивания std::string (действительно std::basic_string)) noexcept. Это имеет смысл для меня. Но затем я заметил, что ни один из стандартных контейнеров (например, std::vector, std::deque, std::list, std::map) не объявляет оператор назначения перемещения noexcept. Это имеет меньшее значение для меня. A std::vector, например, обычно реализуется как три указателя, и указатели, безусловно, могут быть назначены с переносом без исключения исключения. Затем я подумал, что, возможно, проблема связана с перемещением контейнера-распределителя, но std::string тоже имеют распределители, поэтому, если бы это было проблемой, я ожидал, что это повлияет на std::string.
Итак, почему std::string переместить оператор присваивания noexcept, но операторы присваивания пересылки для стандартных контейнеров не являются?