Consider the following program:
struct list_wrapper
{
std::vector<int> m_list;
};
int main()
{
std::vector<int> myList { 1, 1, 2, 3, 5 };
const std::vector<int>::iterator iter = myList.begin();
list_wrapper wrappedList;
wrappedList.m_list = std::move(myList);
// Can I still dereference iter?
return 0;
}
After the call to std::move(myList)
, does iter
now point to a valid item inside wrappedList.m_list
, or do move constructors/assignments invalidate all iterators?
No, they should not get invalidated after a move operation.
23.3.6.5/1