Кажется, что вектор будет проверять, если конструктор перемещения помечен как noexcept, прежде чем принимать решение о перемещении или копировании элементов при перераспределении. Является ли конструктор перемещения по умолчанию как noexcept? Я видел следующую документацию, но она не указала это. http://en.cppreference.com/w/cpp/language/move_constructor
Неявно объявленный конструктор перемещения
Если пользовательский ход не задан конструкторы предоставляются для типа класса (struct, class или union), и все следующее верно: нет пользовательской копии конструкторов нет пользовательских операторов присваивания копий нет пользовательских операторов присваивания операторов, нет объявленные пользователем деструкторы, неявно объявленный конструктор перемещения не определены как удаленные из-за условий, описанных в следующем разделе то компилятор объявит конструктор перемещения как встроенную публикацию член его класса с подписью T:: T (T & &). Класс может иметь многопозиционные конструкторы, например. как T:: T (const T &), так и T:: T (T & &). Если имеются определенные пользовательские конструкторы перемещения, пользователь может все еще принудительно генерирует неявно объявленный конструктор перемещения с ключевое слово default.