From 63fe2d5bd20c9e90857c817870c541f36b2e814e Mon Sep 17 00:00:00 2001 From: Spiros Tsalikis Date: Thu, 22 Jul 2021 03:40:00 -0400 Subject: [PATCH] Add copy constructor for dynamic_format_arg_store, and test --- include/fmt/args.h | 12 ++++++++++++ test/args-test.cc | 13 +++++++++++++ 2 files changed, 25 insertions(+) diff --git a/include/fmt/args.h b/include/fmt/args.h index 562e8ab1..36f62220 100644 --- a/include/fmt/args.h +++ b/include/fmt/args.h @@ -143,6 +143,18 @@ class dynamic_format_arg_store } public: + constexpr dynamic_format_arg_store() = default; + + constexpr dynamic_format_arg_store( + const dynamic_format_arg_store& store) + : +#if FMT_GCC_VERSION && FMT_GCC_VERSION < 409 + basic_format_args(), +#endif + data_(store.data_), + named_info_(store.named_info_) { + } + /** \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 a7421bc5..2b1db8c8 100644 --- a/test/args-test.cc +++ b/test/args-test.cc @@ -171,3 +171,16 @@ TEST(args_test, throw_on_copy) { } EXPECT_EQ(fmt::vformat("{}", store), "foo"); } + +TEST(args_test, copy_constructor) { + auto store = fmt::dynamic_format_arg_store(); + store.push_back(fmt::arg("test1", "value1")); + store.push_back(fmt::arg("test2", "value2")); + store.push_back(fmt::arg("test3", "value3")); + + auto store2 = store; + store2.push_back(fmt::arg("test4", "value4")); + + auto result = fmt::vformat("{test1} {test2} {test3} {test4}", store2); + EXPECT_EQ(result, "value1 value2 value3 value4"); +}