diff --git a/include/sg14/inplace_vector.h b/include/sg14/inplace_vector.h index 2a73879..828a0c6 100644 --- a/include/sg14/inplace_vector.h +++ b/include/sg14/inplace_vector.h @@ -99,7 +99,7 @@ struct SG14_INPLACE_VECTOR_TRIVIALLY_RELOCATABLE_IF(std::is_trivially_relocatabl if constexpr (std::is_trivially_copy_constructible_v) { std::memmove(this, std::addressof(rhs), sizeof(ipvbase)); } else { - std::uninitialized_copy_n(rhs.data_, rhs.data_ + rhs.size_, data_); + std::uninitialized_copy_n(rhs.data_, rhs.size_, data_); size_ = rhs.size_; } } diff --git a/test/inplace_vector_test.cpp b/test/inplace_vector_test.cpp index c939f2b..36679a7 100644 --- a/test/inplace_vector_test.cpp +++ b/test/inplace_vector_test.cpp @@ -426,6 +426,32 @@ TEST(inplace_vector, ConstructorsThrow) } } +TEST(inplace_vector, Copying) +{ + { + using V = sg14::inplace_vector; + V source = {1,2,3}; + V dest = source; + EXPECT_EQ(dest, (V{1,2,3})); + dest = {4,5}; + EXPECT_EQ(dest, (V{4,5})); + dest = source; + EXPECT_EQ(dest, (V{1,2,3})); + EXPECT_EQ(source, (V{1,2,3})); + } + { + using V = sg14::inplace_vector; + V source = {"1", "2", "3"}; + V dest = source; + EXPECT_EQ(dest, Seq("1", "2", "3")); + dest = {"4", "5"}; + EXPECT_EQ(dest, Seq("4", "5")); + dest = source; + EXPECT_EQ(dest, Seq("1", "2", "3")); + EXPECT_EQ(source, Seq("1", "2", "3")); + } +} + TEST(inplace_vector, TransfersOfOwnership) { {