From c0813c59f303152dcec3af9a702bc92d551e5248 Mon Sep 17 00:00:00 2001 From: Dean Moldovan Date: Fri, 9 Oct 2015 11:55:36 +0200 Subject: [PATCH] Work around UDL macro stringification bug on some versions of GCC See bug report: https://gcc.gnu.org/ml/gcc-bugs/2015-04/msg02027.html --- test/format-test.cc | 20 ++++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) diff --git a/test/format-test.cc b/test/format-test.cc index c189f990..3fceab88 100644 --- a/test/format-test.cc +++ b/test/format-test.cc @@ -1604,23 +1604,31 @@ TEST(FormatTest, MaxArgs) { } #if FMT_USE_USER_DEFINED_LITERALS +// Passing user-defined literals directly to EXPECT_EQ causes problems +// with macro argument stringification (#) on some versions of GCC. +// Workaround: Assing the UDL result to a variable before the macro. + using namespace fmt::literals; TEST(LiteralsTest, Format) { - EXPECT_EQ(format("{}c{}", "ab", 1), "{}c{}"_format("ab", 1)); - EXPECT_EQ(format(L"{}c{}", L"ab", 1), L"{}c{}"_format(L"ab", 1)); + auto udl_format = "{}c{}"_format("ab", 1); + EXPECT_EQ(format("{}c{}", "ab", 1), udl_format); + auto udl_format_w = L"{}c{}"_format(L"ab", 1); + EXPECT_EQ(format(L"{}c{}", L"ab", 1), udl_format_w); } TEST(LiteralsTest, NamedArg) { + auto udl_a = format("{first}{second}{first}{third}", + "first"_a="abra", "second"_a="cad", "third"_a=99); EXPECT_EQ(format("{first}{second}{first}{third}", fmt::arg("first", "abra"), fmt::arg("second", "cad"), fmt::arg("third", 99)), - format("{first}{second}{first}{third}", - "first"_a="abra", "second"_a="cad", "third"_a=99)); + udl_a); + auto udl_a_w = format(L"{first}{second}{first}{third}", + L"first"_a=L"abra", L"second"_a=L"cad", L"third"_a=99); EXPECT_EQ(format(L"{first}{second}{first}{third}", fmt::arg(L"first", L"abra"), fmt::arg(L"second", L"cad"), fmt::arg(L"third", 99)), - format(L"{first}{second}{first}{third}", - L"first"_a=L"abra", L"second"_a=L"cad", L"third"_a=99)); + udl_a_w); } #endif // FMT_USE_USER_DEFINED_LITERALS