diff options
| author | Howard Hinnant <hhinnant@apple.com> | 2013-04-18 15:02:57 +0000 |
|---|---|---|
| committer | Howard Hinnant <hhinnant@apple.com> | 2013-04-18 15:02:57 +0000 |
| commit | ab65a6f560438af4eb60aa0d66a44c044debf37b (patch) | |
| tree | f1fd9fe7f8bb6a00a38f9a048b24887f8d79014b /libcxx/test/containers/sequences/vector | |
| parent | cf7c55ebcceb9921c24cfa76006158cf368991cd (diff) | |
| download | bcm5719-llvm-ab65a6f560438af4eb60aa0d66a44c044debf37b.tar.gz bcm5719-llvm-ab65a6f560438af4eb60aa0d66a44c044debf37b.zip | |
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.
llvm-svn: 179760
Diffstat (limited to 'libcxx/test/containers/sequences/vector')
| -rw-r--r-- | libcxx/test/containers/sequences/vector/vector.modifiers/erase_iter_iter.pass.cpp | 7 |
1 files changed, 7 insertions, 0 deletions
diff --git a/libcxx/test/containers/sequences/vector/vector.modifiers/erase_iter_iter.pass.cpp b/libcxx/test/containers/sequences/vector/vector.modifiers/erase_iter_iter.pass.cpp index 1185412adcb..5fdcb8775b5 100644 --- a/libcxx/test/containers/sequences/vector/vector.modifiers/erase_iter_iter.pass.cpp +++ b/libcxx/test/containers/sequences/vector/vector.modifiers/erase_iter_iter.pass.cpp @@ -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); + } } |

