diff --git a/include/fmt/args.h b/include/fmt/args.h index 99060040..9a8e4ed2 100644 --- a/include/fmt/args.h +++ b/include/fmt/args.h @@ -145,9 +145,6 @@ class dynamic_format_arg_store public: constexpr dynamic_format_arg_store() = default; - constexpr dynamic_format_arg_store( - const dynamic_format_arg_store& store) = delete; - /** \rst Adds an argument into the dynamic store for later passing to a formatting diff --git a/test/args-test.cc b/test/args-test.cc index e793cb5c..d9afbc1a 100644 --- a/test/args-test.cc +++ b/test/args-test.cc @@ -7,6 +7,8 @@ #include "fmt/args.h" +#include + #include "gtest/gtest.h" TEST(args_test, basic) { @@ -171,3 +173,21 @@ TEST(args_test, throw_on_copy) { } EXPECT_EQ(fmt::vformat("{}", store), "foo"); } + +TEST(args_test, move_constructor) { + const int test_integer = 42; + const char* const test_c_string = "foo"; + + std::unique_ptr> + store_uptr(new fmt::dynamic_format_arg_store()); + store_uptr->push_back(test_integer); + store_uptr->push_back(std::string(test_c_string)); + store_uptr->push_back(fmt::arg("a1", test_c_string)); + + fmt::dynamic_format_arg_store moved_store( + std::move(*store_uptr)); + store_uptr.reset(); + EXPECT_EQ( + fmt::vformat("{} {} {a1}", moved_store), + std::to_string(test_integer) + " " + test_c_string + " " + test_c_string); +}