From c9a10631cb3a656b0a0a3ba3cf0ef7ea541df30f Mon Sep 17 00:00:00 2001 From: "Jason A. Donenfeld" Date: Tue, 22 Jun 2021 14:34:33 +0200 Subject: [PATCH] format: do not use udl_{arg,formatter} return types when UDL is not in use The udl_{arg,formatter} structs are only defined when FMT_USE_USER_DEFINED_LITERALS is set, so don't try to define things that return that struct when it's not defined. --- include/fmt/format.h | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/include/fmt/format.h b/include/fmt/format.h index 03ae1c96..92b0f0fc 100644 --- a/include/fmt/format.h +++ b/include/fmt/format.h @@ -2730,6 +2730,8 @@ extern template auto snprintf_float(long double value, #endif // FMT_HEADER_ONLY FMT_END_DETAIL_NAMESPACE + +#if FMT_USE_USER_DEFINED_LITERALS inline namespace literals { /** \rst @@ -2741,18 +2743,18 @@ inline namespace literals { fmt::print("Elapsed time: {s:.2f} seconds", "s"_a=1.23); \endrst */ -#if FMT_USE_NONTYPE_TEMPLATE_PARAMETERS +# if FMT_USE_NONTYPE_TEMPLATE_PARAMETERS template constexpr auto operator""_a() -> detail::udl_arg, sizeof(Str.data) / sizeof(decltype(Str.data[0])), Str> { return {}; } -#else +# else constexpr auto operator"" _a(const char* s, size_t) -> detail::udl_arg { return {s}; } -#endif +# endif /** \rst @@ -2769,6 +2771,7 @@ constexpr auto operator"" _format(const char* s, size_t n) return {{s, n}}; } } // namespace literals +#endif // FMT_USE_USER_DEFINED_LITERALS template ::value)> inline auto vformat(const Locale& loc, string_view fmt, format_args args)