diff --git a/fmt/format.h b/fmt/format.h index bd99746a..01d89c37 100644 --- a/fmt/format.h +++ b/fmt/format.h @@ -1227,6 +1227,20 @@ struct WCharHelper { typedef Null Unsupported; }; +// A helper class template to enable or disable overloads taking +// characters and strings in MakeValue. +template +struct CharHelper { + typedef T Supported; + typedef Null Unsupported; +}; + +template +struct CharHelper { + typedef Null Supported; + typedef T Unsupported; +}; + typedef char Yes[1]; typedef char No[2]; @@ -1370,6 +1384,12 @@ class MakeValue : public Arg { #endif MakeValue(typename WCharHelper::Unsupported); + MakeValue(typename CharHelper::Unsupported); +#if FMT_HAS_STRING_VIEW + MakeValue(typename CharHelper::Unsupported); +#endif + MakeValue(typename CharHelper::Unsupported); + void set_string(StringRef str) { string.value = str.data(); string.size = str.size(); @@ -1459,7 +1479,9 @@ class MakeValue : public Arg { #endif #define FMT_MAKE_STR_VALUE(Type, TYPE) \ - MakeValue(Type value) { set_string(value); } \ + MakeValue(typename CharHelper::Supported value) { \ + set_string(value); \ + } \ static uint64_t type(Type) { return Arg::TYPE; } FMT_MAKE_VALUE(char *, string.value, CSTRING)