From 6b3c83ce50e92068f428f284fbdf86c4328a1bd3 Mon Sep 17 00:00:00 2001 From: Karen Arutyunov Date: Fri, 6 Aug 2021 16:48:07 +0300 Subject: Fix small_vector(small_vector&&) to clear object it moves from --- libbutl/small-vector.mxx | 5 +++++ tests/small-vector/driver.cxx | 1 + 2 files changed, 6 insertions(+) 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. } { -- cgit v1.1