Fix handling of types with deleted rvalue conversion to string (#1421)
diff --git a/include/fmt/core.h b/include/fmt/core.h
index 738766b..89cbbb1 100644
--- a/include/fmt/core.h
+++ b/include/fmt/core.h
@@ -923,7 +923,7 @@
 // A type constant after applying arg_mapper<Context>.
 template <typename T, typename Context>
 using mapped_type_constant =
-    type_constant<decltype(arg_mapper<Context>().map(std::declval<T>())),
+    type_constant<decltype(arg_mapper<Context>().map(std::declval<const T&>())),
                   typename Context::char_type>;
 
 enum { packed_arg_bits = 5 };
diff --git a/test/core-test.cc b/test/core-test.cc
index c370600..dac40a0 100644
--- a/test/core-test.cc
+++ b/test/core-test.cc
@@ -649,3 +649,14 @@
   EXPECT_EQ("foo", fmt::format("{}", explicitly_convertible_to_string_like()));
 }
 #endif
+
+struct disabled_rvalue_conversion {
+  operator const char*() const& { return "foo"; }
+  operator const char*()& { return "foo"; }
+  operator const char*() const&& = delete;
+  operator const char*()&& = delete;
+};
+
+TEST(FormatterTest, DisabledRValueConversion) {
+  EXPECT_EQ("foo", fmt::format("{}", disabled_rvalue_conversion()));
+}