Просто быстрый вопрос, на котором я не могу найти хорошую ссылку, особенно в отношении текущих реализаций будущего стандарта С++ 0x.
Так как перемещать конструкторы могут бросать, это означает, что некоторые стандартные функции библиотеки не могут обеспечить надежную гарантию исключения (например, vector<T>::resize()
).
Было высказано предложение: 1) сделать все стандартные механизмы перемещения библиотеки "no throw" и 2) добавить проверки времени компиляции кода пользователя, чтобы убедиться, что, например. std::pair<std::string, MyType>
определяет конструктор конструктора невозврата или вообще не имеет конструктора перемещения.
Что случилось с этим предложением (особенно в отношении этого вопроса)? Как проблема "решена" в окончательном проекте?
Самое главное, что это значит для меня, когда я использую недавний GCC или MSVC 10? Предоставляют ли эти реализации стандартной библиотеки гарантию Strong Exception Guarantee, например. std::vector<MyTypeWithAThrowingMoveConstructor>::resize()
?
EDIT: Я не видел этот вопрос, который явно связан. Если есть консенсус относительно того, что мой вопрос является дубликатом, а затем закройте его. Тем не менее, меня действительно интересует, что реализовано, а не то, что обсуждалось.