Simplify feature checks

This commit is contained in:
Victor Zverovich 2019-06-19 07:46:09 -07:00
parent bb827341ed
commit 22ddd4b989
2 changed files with 11 additions and 31 deletions

View File

@ -60,20 +60,6 @@
# define FMT_CUDA_VERSION 0 # define FMT_CUDA_VERSION 0
#endif #endif
#ifdef __GNUC_LIBSTD__
# define FMT_GNUC_LIBSTD_VERSION \
(__GNUC_LIBSTD__ * 100 + __GNUC_LIBSTD_MINOR__)
#endif
// Check whether we can use unrestricted unions and use struct if not.
#ifndef FMT_UNRESTRICTED_UNION
# if FMT_MSC_VER >= 1900 || FMT_GCC_VERSION >= 406 || FMT_CLANG_VERSION >= 303
# define FMT_UNRESTRICTED_UNION union
# else
# define FMT_UNRESTRICTED_UNION struct
# endif
#endif
#ifdef __has_builtin #ifdef __has_builtin
# define FMT_HAS_BUILTIN(x) __has_builtin(x) # define FMT_HAS_BUILTIN(x) __has_builtin(x)
#else #else
@ -142,14 +128,11 @@ FMT_END_NAMESPACE
// __builtin_clz is broken in clang with Microsoft CodeGen: // __builtin_clz is broken in clang with Microsoft CodeGen:
// https://github.com/fmtlib/fmt/issues/519 // https://github.com/fmtlib/fmt/issues/519
#ifndef _MSC_VER #if (FMT_GCC_VERSION || FMT_HAS_BUILTIN(__builtin_clz)) && !FMT_MSC_VER
# if FMT_GCC_VERSION || FMT_HAS_BUILTIN(__builtin_clz) # define FMT_BUILTIN_CLZ(n) __builtin_clz(n)
# define FMT_BUILTIN_CLZ(n) __builtin_clz(n) #endif
# endif #if (FMT_GCC_VERSION || FMT_HAS_BUILTIN(__builtin_clzll)) && !FMT_MSC_VER
# define FMT_BUILTIN_CLZLL(n) __builtin_clzll(n)
# if FMT_GCC_VERSION || FMT_HAS_BUILTIN(__builtin_clzll)
# define FMT_BUILTIN_CLZLL(n) __builtin_clzll(n)
# endif
#endif #endif
// Some compilers masquerade as both MSVC and GCC-likes or otherwise support // Some compilers masquerade as both MSVC and GCC-likes or otherwise support
@ -1727,15 +1710,14 @@ template <typename Char> struct arg_ref {
} }
Kind kind; Kind kind;
FMT_UNRESTRICTED_UNION value { union value {
FMT_CONSTEXPR value() : index(0u) {} FMT_CONSTEXPR value() : index(0u) {}
FMT_CONSTEXPR value(unsigned id) : index(id) {} FMT_CONSTEXPR value(unsigned id) : index(id) {}
FMT_CONSTEXPR value(string_view_metadata n) : name(n) {} FMT_CONSTEXPR value(string_view_metadata n) : name(n) {}
unsigned index; unsigned index;
string_view_metadata name; string_view_metadata name;
} } val;
val;
}; };
// Format specifiers with width and precision resolved at formatting rather // Format specifiers with width and precision resolved at formatting rather

View File

@ -40,7 +40,7 @@ template <typename Char> struct format_part {
which_arg_id which; which_arg_id which;
FMT_UNRESTRICTED_UNION value { union value {
FMT_CONSTEXPR value() : index(0u) {} FMT_CONSTEXPR value() : index(0u) {}
FMT_CONSTEXPR value(unsigned id) : index(id) {} FMT_CONSTEXPR value(unsigned id) : index(id) {}
FMT_CONSTEXPR value(internal::string_view_metadata id) FMT_CONSTEXPR value(internal::string_view_metadata id)
@ -48,8 +48,7 @@ template <typename Char> struct format_part {
unsigned index; unsigned index;
internal::string_view_metadata named_index; internal::string_view_metadata named_index;
} } val;
val;
}; };
struct specification { struct specification {
@ -89,7 +88,7 @@ template <typename Char> struct format_part {
which_value which; which_value which;
std::size_t end_of_argument_id; std::size_t end_of_argument_id;
FMT_UNRESTRICTED_UNION value { union value {
FMT_CONSTEXPR value() : arg_id(0u) {} FMT_CONSTEXPR value() : arg_id(0u) {}
FMT_CONSTEXPR value(unsigned id) : arg_id(id) {} FMT_CONSTEXPR value(unsigned id) : arg_id(id) {}
FMT_CONSTEXPR value(named_argument_id named_id) FMT_CONSTEXPR value(named_argument_id named_id)
@ -100,8 +99,7 @@ template <typename Char> struct format_part {
internal::string_view_metadata named_arg_id; internal::string_view_metadata named_arg_id;
internal::string_view_metadata text; internal::string_view_metadata text;
specification spec; specification spec;
} } val;
val;
}; };
namespace internal { namespace internal {