diff --git a/include/fmt/std.h b/include/fmt/std.h index 5cfe1d8729b1..b4e055c28d41 100644 --- a/include/fmt/std.h +++ b/include/fmt/std.h @@ -448,5 +448,18 @@ struct formatter, Char, } }; +#ifdef __cpp_lib_atomic_flag_test +FMT_EXPORT +template +struct formatter + : formatter { + template + auto format(const std::atomic_flag& v, FormatContext& ctx) const + -> decltype(ctx.out()) { + return formatter::format(v.test(), ctx); + } +}; +#endif // __cpp_lib_atomic_flag_test + FMT_END_NAMESPACE #endif // FMT_STD_H_ diff --git a/test/std-test.cc b/test/std-test.cc index d0617a73f303..56904cc9889d 100644 --- a/test/std-test.cc +++ b/test/std-test.cc @@ -244,3 +244,14 @@ TEST(std_test, format_atomic) { const std::atomic cb(true); EXPECT_EQ(fmt::format("{}", cb), "true"); } + +#ifdef __cpp_lib_atomic_flag_test +TEST(std_test, format_atomic_flag) { + std::atomic_flag f = ATOMIC_FLAG_INIT; + (void) f.test_and_set(); + EXPECT_EQ(fmt::format("{}", f), "true"); + + const std::atomic_flag cf = ATOMIC_FLAG_INIT; + EXPECT_EQ(fmt::format("{}", cf), "false"); +} +#endif // __cpp_lib_atomic_flag_test