diff --git a/include/fmt/base.h b/include/fmt/base.h index 4df7715b..f5a45563 100644 --- a/include/fmt/base.h +++ b/include/fmt/base.h @@ -179,6 +179,17 @@ # define FMT_CATCH(x) if (false) #endif +// Check if RTTI is disabled. +#ifdef FMT_USE_RTTI +// Use the provided definition. +#elif defined(__GXX_RTTI) || FMT_HAS_FEATURE(cxx_rtti) || defined(_CPPRTTI) || \ + defined(__INTEL_RTTI__) || defined(__RTTI) +// __RTTI is for EDG compilers. _CPPRTTI is for MSVC. +# define FMT_USE_RTTI 1 +#else +# define FMT_USE_RTTI 0 +#endif + #if FMT_HAS_CPP17_ATTRIBUTE(fallthrough) # define FMT_FALLTHROUGH [[fallthrough]] #elif defined(__clang__) @@ -197,12 +208,12 @@ # define FMT_NORETURN #endif -#ifndef FMT_NODISCARD -# if FMT_HAS_CPP17_ATTRIBUTE(nodiscard) -# define FMT_NODISCARD [[nodiscard]] -# else -# define FMT_NODISCARD -# endif +#ifdef FMT_NODISCARD +// Use the provided definition. +#elif FMT_HAS_CPP17_ATTRIBUTE(nodiscard) +# define FMT_NODISCARD [[nodiscard]] +#else +# define FMT_NODISCARD #endif #ifdef FMT_DEPRECATED @@ -301,10 +312,6 @@ # define FMT_API #endif -#ifndef FMT_UNICODE -# define FMT_UNICODE 1 -#endif - // Specifies whether to handle built-in and string types specially. // FMT_BUILTIN_TYPE=0 may result in smaller library size at the cost of higher // per-call binary size. @@ -315,17 +322,6 @@ # error FMT_BUILTIN_TYPES=0 requires constexpr if support #endif -// Check if rtti is available. -#ifndef FMT_USE_RTTI -// __RTTI is for EDG compilers. _CPPRTTI is for MSVC. -# if defined(__GXX_RTTI) || FMT_HAS_FEATURE(cxx_rtti) || defined(_CPPRTTI) || \ - defined(__INTEL_RTTI__) || defined(__RTTI) -# define FMT_USE_RTTI 1 -# else -# define FMT_USE_RTTI 0 -# endif -#endif - #define FMT_FWD(...) static_cast(__VA_ARGS__) // Enable minimal optimizations for more compact code in debug mode. @@ -497,6 +493,10 @@ constexpr auto use_utf8() -> bool { return !FMT_MSC_VERSION || is_utf8_enabled(); } +#ifndef FMT_UNICODE +# define FMT_UNICODE 1 +#endif + static_assert(!FMT_UNICODE || use_utf8(), "Unicode support requires compiling with /utf-8"); @@ -1574,7 +1574,7 @@ template struct arg_mapper { std::is_function::type>::value || (std::is_array::value && !std::is_convertible::value))> - FMT_CONSTEXPR auto map(const T&) -> unformattable_pointer { + FMT_MAP_API auto map(const T&) -> unformattable_pointer { return {}; } @@ -1623,7 +1623,7 @@ template struct arg_mapper { return map(named_arg.value); } - auto map(...) -> unformattable { return {}; } + FMT_MAP_API auto map(...) -> unformattable { return {}; } }; // A type constant after applying arg_mapper.