Переместить конструкторы и гарантию Strong Exception

Просто быстрый вопрос, на котором я не могу найти хорошую ссылку, особенно в отношении текущих реализаций будущего стандарта С++ 0x.

Так как перемещать конструкторы могут бросать, это означает, что некоторые стандартные функции библиотеки не могут обеспечить надежную гарантию исключения (например, vector<T>::resize()).

Было высказано предложение: 1) сделать все стандартные механизмы перемещения библиотеки "no throw" и 2) добавить проверки времени компиляции кода пользователя, чтобы убедиться, что, например. std::pair<std::string, MyType> определяет конструктор конструктора невозврата или вообще не имеет конструктора перемещения.

Что случилось с этим предложением (особенно в отношении этого вопроса)? Как проблема "решена" в окончательном проекте?

Самое главное, что это значит для меня, когда я использую недавний GCC или MSVC 10? Предоставляют ли эти реализации стандартной библиотеки гарантию Strong Exception Guarantee, например. std::vector<MyTypeWithAThrowingMoveConstructor>::resize()?

EDIT: Я не видел этот вопрос, который явно связан. Если есть консенсус относительно того, что мой вопрос является дубликатом, а затем закройте его. Тем не менее, меня действительно интересует, что реализовано, а не то, что обсуждалось.

Ответ 1

Я не проверял конкретные реализации, но общая идея заключается в том, что если конструктор перемещения может выбрасывать, вектор должен будет скопировать элементы. Таким образом, можно откатить в случае исключения.

Существует даже вспомогательная функция move_if_noexcept, определенная в <utility>, чтобы помочь ей решить, что делать.