From 805e84f6795d286019ed865016f2703239c6b9fe Mon Sep 17 00:00:00 2001 From: Barry Revzin Date: Mon, 19 Jun 2023 13:36:58 -0500 Subject: [PATCH] Adding guards around if constexpr --- include/fmt/core.h | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/include/fmt/core.h b/include/fmt/core.h index 86dcd7a3..5fe659ff 100644 --- a/include/fmt/core.h +++ b/include/fmt/core.h @@ -1539,8 +1539,10 @@ constexpr auto encode_types() -> unsigned long long { (encode_types() << packed_arg_bits); } +#if defined(__cpp_if_constexpr) // This type is intentionally undefined, only used for errors template struct type_is_unformattable_for; +#endif template FMT_CONSTEXPR FMT_INLINE auto make_arg(T& val) -> value { @@ -1548,9 +1550,11 @@ FMT_CONSTEXPR FMT_INLINE auto make_arg(T& val) -> value { constexpr bool formattable_char = !std::is_same::value; +#if defined(__cpp_if_constexpr) if constexpr (not formattable_char) { type_is_unformattable_for _; } +#endif static_assert(formattable_char, "Mixing character types is disallowed."); // Formatting of arbitrary pointers is disallowed. If you want to format a @@ -1558,16 +1562,20 @@ FMT_CONSTEXPR FMT_INLINE auto make_arg(T& val) -> value { // formatting of `[const] volatile char*` printed as bool by iostreams. constexpr bool formattable_pointer = !std::is_same::value; +#if defined(__cpp_if_constexpr) if constexpr (not formattable_pointer) { type_is_unformattable_for _; } +#endif static_assert(formattable_pointer, "Formatting of non-void pointers is disallowed."); constexpr bool formattable = !std::is_same::value; +#if defined(__cpp_if_constexpr) if constexpr (not formattable) { type_is_unformattable_for _; } +#endif static_assert( formattable, "Cannot format an argument. To make type T formattable provide a " @@ -2532,6 +2540,7 @@ FMT_CONSTEXPR auto parse_format_specs(ParseContext& ctx) mapped_type_constant::value != type::custom_type, decltype(arg_mapper().map(std::declval())), typename strip_named_arg::type>; +#if defined(__cpp_if_constexpr) if constexpr (std::is_default_constructible_v< formatter>) { return formatter().parse(ctx); @@ -2539,6 +2548,9 @@ FMT_CONSTEXPR auto parse_format_specs(ParseContext& ctx) type_is_unformattable_for _; return ctx.begin(); } +#else + return formatter().parse(ctx); +#endif } // Checks char specs and returns true iff the presentation type is char-like.