Just a quick question, on which I cannot find a good reference, especially with regard to current implementations of the future C++0x standard.
Since move constructors can throw, it means that some standard library functions cannot provide the strong exception guarantee (eg. vector<T>::resize()
).
There was a proposal to 1) make all standard library move constructors "no throw", and 2) to add compile time checks on user code to ensure that eg. std::pair<std::string, MyType>
defines a nothrow move constructor or no move constructor at all.
What happened to this proposal (esp. with respect to this question) ? How is the issue "solved" in the final draft ?
Most importantly, what does it imply for me when I use a recent GCC or MSVC 10 ? Does those implementations of the standard library provide the Strong Exception Guarantee on eg. std::vector<MyTypeWithAThrowingMoveConstructor>::resize()
?
EDIT: I didn't see this question which is clearly related. If there is a consensus on the fact that my question is a duplicate, then close it. However, I am really interested on what is implemented, not what has been discussed.
See Question&Answers more detail:os