diff options
author | Karen Arutyunov <karen@codesynthesis.com> | 2021-08-06 16:48:07 +0300 |
---|---|---|
committer | Karen Arutyunov <karen@codesynthesis.com> | 2021-08-06 17:40:19 +0300 |
commit | 6b3c83ce50e92068f428f284fbdf86c4328a1bd3 (patch) | |
tree | de10ee768f7eb3d589e3b4e7f10b00fcaf3737da | |
parent | 7ebd5f9f540e907de06d8fdc76d95ccacabbbe1f (diff) |
Fix small_vector(small_vector&&) to clear object it moves from
-rw-r--r-- | libbutl/small-vector.mxx | 5 | ||||
-rw-r--r-- | tests/small-vector/driver.cxx | 1 |
2 files changed, 6 insertions, 0 deletions
diff --git a/libbutl/small-vector.mxx b/libbutl/small-vector.mxx index 2a92182..7f9bb1e 100644 --- a/libbutl/small-vector.mxx +++ b/libbutl/small-vector.mxx @@ -125,6 +125,11 @@ LIBBUTL_MODEXPORT namespace butl reserve (); *this = std::move (v); // Delegate to operator=(&&). + + // Note that in contrast to the move assignment operator, the + // constructor must clear the other vector. + // + v.clear (); } small_vector& diff --git a/tests/small-vector/driver.cxx b/tests/small-vector/driver.cxx index d79a03b..a8326be 100644 --- a/tests/small-vector/driver.cxx +++ b/tests/small-vector/driver.cxx @@ -111,6 +111,7 @@ main () s1.emplace_back ("abc"); vector s2 (move (s1)); assert (s2[0] == "abc" && s2.capacity () == 2 && small (s2)); + assert (s1.empty ()); // The source vector must be empty now. } { |