Skip to content

Commit 0788527

Browse files
committed
Minor cleanup
1 parent 4999416 commit 0788527

File tree

2 files changed

+34
-42
lines changed

2 files changed

+34
-42
lines changed

include/fmt/std.h

Lines changed: 15 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -232,6 +232,19 @@ struct is_bit_reference_like<std::__bit_const_reference<C>> {
232232
};
233233
#endif
234234

235+
template <typename T, typename Enable = void>
236+
struct has_format_as : std::false_type {};
237+
template <typename T>
238+
struct has_format_as<T, void_t<decltype(format_as(std::declval<const T&>()))>>
239+
: std::true_type {};
240+
241+
template <typename T, typename Enable = void>
242+
struct has_format_as_member : std::false_type {};
243+
template <typename T>
244+
struct has_format_as_member<
245+
T, void_t<decltype(formatter<T>::format_as(std::declval<const T&>()))>>
246+
: std::true_type {};
247+
235248
} // namespace detail
236249

237250
template <typename T, typename Deleter>
@@ -678,25 +691,10 @@ template <typename T, typename Char> struct formatter<std::complex<T>, Char> {
678691
}
679692
};
680693

681-
namespace detail {
682-
template <typename T, typename Enable = void>
683-
struct has_format_as : std::false_type {};
684-
template <typename T>
685-
struct has_format_as<T, void_t<decltype(format_as(std::declval<const T&>()))>>
686-
: std::true_type {};
687-
688-
template <typename T, typename Enable = void>
689-
struct has_format_as_member : std::false_type {};
690-
template <typename T>
691-
struct has_format_as_member<
692-
T, void_t<decltype(formatter<T>::format_as(std::declval<const T&>()))>>
693-
: std::true_type {};
694-
} // namespace detail
695-
696-
// Guard against format_as because reference_wrappers are implicitly convertible
697-
// to T&
698694
template <typename T, typename Char>
699695
struct formatter<std::reference_wrapper<T>, Char,
696+
// Guard against format_as because reference_wrapper is
697+
// implicitly convertible to T&.
700698
enable_if_t<is_formattable<remove_cvref_t<T>, Char>::value &&
701699
!detail::has_format_as<T>::value &&
702700
!detail::has_format_as_member<T>::value>>

test/std-test.cc

Lines changed: 19 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -413,37 +413,31 @@ TEST(std_test, format_shared_ptr) {
413413

414414
TEST(std_test, format_reference_wrapper) {
415415
int num = 35;
416-
EXPECT_EQ("35", fmt::to_string(std::cref(num)));
417-
EXPECT_EQ("35", fmt::to_string(std::ref(num)));
418-
EXPECT_EQ("35", fmt::format("{}", std::cref(num)));
419-
EXPECT_EQ("35", fmt::format("{}", std::ref(num)));
416+
EXPECT_EQ(fmt::to_string(std::cref(num)), "35");
417+
EXPECT_EQ(fmt::to_string(std::ref(num)), "35");
418+
EXPECT_EQ(fmt::format("{}", std::cref(num)), "35");
419+
EXPECT_EQ(fmt::format("{}", std::ref(num)), "35");
420420
}
421421

422-
// Regression test for https://github.com/fmtlib/fmt/issues/4424
423-
struct type_with_format_as {
424-
int x;
425-
};
426-
427-
int format_as(const type_with_format_as& t) { return t.x; }
422+
// Regression test for https://github.com/fmtlib/fmt/issues/4424.
423+
struct type_with_format_as {};
424+
int format_as(type_with_format_as) { return 20; }
428425

429426
TEST(std_test, format_reference_wrapper_with_format_as) {
430-
type_with_format_as t{20};
431-
EXPECT_EQ("20", fmt::to_string(std::cref(t)));
432-
EXPECT_EQ("20", fmt::to_string(std::ref(t)));
433-
EXPECT_EQ("20", fmt::format("{}", std::cref(t)));
434-
EXPECT_EQ("20", fmt::format("{}", std::ref(t)));
427+
type_with_format_as t;
428+
EXPECT_EQ(fmt::to_string(std::cref(t)), "20");
429+
EXPECT_EQ(fmt::to_string(std::ref(t)), "20");
430+
EXPECT_EQ(fmt::format("{}", std::cref(t)), "20");
431+
EXPECT_EQ(fmt::format("{}", std::ref(t)), "20");
435432
}
436433

437-
struct type_with_format_as_string {
438-
std::string str;
439-
};
440-
441-
std::string format_as(const type_with_format_as_string& t) { return t.str; }
434+
struct type_with_format_as_string {};
435+
std::string format_as(type_with_format_as_string) { return "foo"; }
442436

443437
TEST(std_test, format_reference_wrapper_with_format_as_string) {
444-
type_with_format_as_string t{"foo"};
445-
EXPECT_EQ("foo", fmt::to_string(std::cref(t)));
446-
EXPECT_EQ("foo", fmt::to_string(std::ref(t)));
447-
EXPECT_EQ("foo", fmt::format("{}", std::cref(t)));
448-
EXPECT_EQ("foo", fmt::format("{}", std::ref(t)));
438+
type_with_format_as_string t;
439+
EXPECT_EQ(fmt::to_string(std::cref(t)), "foo");
440+
EXPECT_EQ(fmt::to_string(std::ref(t)), "foo");
441+
EXPECT_EQ(fmt::format("{}", std::cref(t)), "foo");
442+
EXPECT_EQ(fmt::format("{}", std::ref(t)), "foo");
449443
}

0 commit comments

Comments
 (0)