After years of telling people: 'If you ever find any of my code that self-move-assigns, send me a bug report.' Somebody finally took me up on it. vector::erase(begin(), begin()) does a self-move-assign of every element in the vector, leaving all of those elements in an unspecified state. I checked the other containers for this same bug and did not find it. Added test case.
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@179760 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@@ -47,4 +47,11 @@ int main()
|
||||
assert(distance(l1.cbegin(), l1.cend()) == 0);
|
||||
assert(i == l1.begin());
|
||||
}
|
||||
{
|
||||
std::vector<std::vector<int> > outer(2, std::vector<int>(1));
|
||||
outer.erase(outer.begin(), outer.begin());
|
||||
assert(outer.size() == 2);
|
||||
assert(outer[0].size() == 1);
|
||||
assert(outer[1].size() == 1);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user