diff --git a/include/fmt/args.h b/include/fmt/args.h index 562e8ab11185..36f62220c069 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 a7421bc5299d..312cf12345a6 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")); + + fmt::dynamic_format_arg_store 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"); +}