diff --git a/include/fmt/core.h b/include/fmt/core.h index 6d063f8e..0bc74fdf 100644 --- a/include/fmt/core.h +++ b/include/fmt/core.h @@ -971,11 +971,6 @@ template struct arg_mapper { return val; } - FMT_CONSTEXPR const named_arg_base& map( - const named_arg_base& val) { - return val; - } - int map(...) { constexpr bool formattable = sizeof(Context) == 0; static_assert( @@ -1368,8 +1363,9 @@ template class basic_format_args { /** \rst - Constructs a `dynamic_basic_format_args` object from - `~fmt::format_arg_store`. \endrst + Constructs a `basic_format_args` object from + `~fmt::dynamic_format_arg_store`. + \endrst */ template basic_format_args(const dynamic_format_arg_store& store) diff --git a/include/fmt/dyn-args.h b/include/fmt/dyn-args.h index a305b7bc..7f0293c7 100644 --- a/include/fmt/dyn-args.h +++ b/include/fmt/dyn-args.h @@ -85,7 +85,6 @@ class dynamic_format_arg_store { private: using char_type = typename Context::char_type; - static const bool is_packed = false; static const bool has_custom_args = (sizeof...(Args) > 0); using string_type = std::basic_string; @@ -115,10 +114,6 @@ class dynamic_format_arg_store std::forward_list storage_; - // Storage of serialized name_args. Must grow without relocation - // because items in data_ refer to it. - std::forward_list named_args_; - friend class basic_format_args; template const T& get_last_pushed() const { @@ -167,25 +162,6 @@ class dynamic_format_arg_store template void push_back(std::reference_wrapper arg) { emplace_arg(arg.get()); } - - template - void push_back(const internal::named_arg& arg) { - // Named argument is tricky. It's returned by value from fmt::arg() - // and then pointer to it is stored in basic_format_arg<>. - // So after end of expression the pointer becomes dangling. - storage_.emplace_front(string_type{arg.name.data(), arg.name.size()}); - basic_string_view name = get_last_pushed(); - const auto& val = - stored_value(arg.value, internal::need_dyn_copy_t{}); - - auto named_with_stored_parts = fmt::arg(name, val); - // Serialize value into base - internal::arg_mapper().map(named_with_stored_parts); - named_args_.push_front(named_with_stored_parts); - data_.emplace_back(internal::make_arg(named_args_.front())); - // data_.emplace_back(internal::make_arg_from_serialized_named( - // named_args_.front())); - } }; FMT_END_NAMESPACE diff --git a/test/format-dyn-args-test.cc b/test/format-dyn-args-test.cc index fcd9815d..94befa1f 100644 --- a/test/format-dyn-args-test.cc +++ b/test/format-dyn-args-test.cc @@ -89,41 +89,3 @@ TEST(FormatDynArgsTest, NamedArgByRef) { EXPECT_EQ("42", result); } - -TEST(FormatDynArgsTest, NamedInt) { - fmt::dynamic_format_arg_store store; - store.push_back(fmt::arg("a1", 42)); - std::string result = fmt::vformat("{a1}", store); - EXPECT_EQ("42", result); -} - -TEST(FormatDynArgsTest, NamedStrings) { - fmt::dynamic_format_arg_store store; - char str[]{"1234567890"}; - store.push_back(fmt::arg("a1", str)); - store.push_back(fmt::arg("a2", std::cref(str))); - str[0] = 'X'; - - std::string result = fmt::vformat("{a1} and {a2}", store); - - EXPECT_EQ("1234567890 and X234567890", result); -} - -#ifdef FMT_HAS_VARIANT - -TEST(FormatDynArgsTest, NamedCustomFormat) { - fmt::dynamic_format_arg_store store; - Custom c{}; - store.push_back(fmt::arg("a1", c)); - ++c.i; - store.push_back(fmt::arg("a2", c)); - ++c.i; - store.push_back(fmt::arg("a3", std::cref(c))); - ++c.i; - - std::string result = fmt::vformat("{a1} and {a2} and {a3}", store); - - EXPECT_EQ("cust=0 and cust=1 and cust=3", result); -} - -#endif // FMT_HAS_VARIANT