diff --git a/include/fmt/std.h b/include/fmt/std.h index ca26905c..2bab00f2 100644 --- a/include/fmt/std.h +++ b/include/fmt/std.h @@ -143,6 +143,7 @@ FMT_CONSTEXPR auto write_escaped_alternative(OutputIt out, const T& v, formatter, Char> underlying; maybe_set_debug_format(underlying, true); + ctx.advance_to(out); return underlying.format(v, ctx); } #endif diff --git a/test/compile-test.cc b/test/compile-test.cc index a5c04ae0..058c0e71 100644 --- a/test/compile-test.cc +++ b/test/compile-test.cc @@ -185,6 +185,59 @@ TEST(compile_test, format_to) { EXPECT_STREQ("2a", buf); } +TEST(compile_test, format_variant) { +# ifdef __cpp_lib_variant + char buffer[100]; + auto end = + fmt::format_to(buffer, FMT_COMPILE("<{}> {}"), std::variant{42}, 7); + EXPECT_EQ(" 7", std::string(buffer, end)); + + end = + fmt::format_to(buffer, FMT_COMPILE("{}"), std::variant{}); + EXPECT_EQ("variant(monostate)", std::string(buffer, end)); + + end = fmt::format_to(buffer, FMT_COMPILE("{}"), + std::variant>{std::variant{42}}); + EXPECT_EQ("variant(variant(42))", std::string(buffer, end)); + + end = fmt::format_to(buffer, FMT_COMPILE("{}"), + std::variant{"test"}); + EXPECT_EQ("variant(\"test\")", std::string(buffer, end)); + + end = fmt::format_to(buffer, FMT_COMPILE("{}"), std::variant{'a'}); + EXPECT_EQ("variant('a')", std::string(buffer, end)); +# endif +} + +TEST(compile_test, format_expected) { +# ifdef __cpp_lib_expected + char buffer[100]; + auto end = fmt::format_to(buffer, FMT_COMPILE("<{}> {}"), + std::expected{42}, 7); + EXPECT_EQ(" 7", std::string(buffer, end)); + + end = fmt::format_to(buffer, FMT_COMPILE("{}"), + std::expected{std::unexpected(42)}); + EXPECT_EQ("unexpected(42)", std::string(buffer, end)); + + end = fmt::format_to(buffer, FMT_COMPILE("{}"), std::expected{}); + EXPECT_EQ("expected()", std::string(buffer, end)); + + end = fmt::format_to(buffer, FMT_COMPILE("{}"), + std::expected{"test"}); + EXPECT_EQ("expected(\"test\")", std::string(buffer, end)); +# endif +} + +TEST(compile_test, format_unexpected) { +# ifdef __cpp_lib_expected + char buffer[100]; + auto end = fmt::format_to(buffer, FMT_COMPILE("<{}> {}"), + std::unexpected{42}, 7); + EXPECT_EQ(" 7", std::string(buffer, end)); +# endif +} + TEST(compile_test, format_to_n) { constexpr auto buffer_size = 8; char buffer[buffer_size];