diff --git a/include/fmt/format.h b/include/fmt/format.h index 8f05c7d92cf9..76fb60a3bbef 100644 --- a/include/fmt/format.h +++ b/include/fmt/format.h @@ -786,12 +786,24 @@ using is_integer = !std::is_same::value>; #ifndef FMT_USE_FLOAT128 -# ifdef __SIZEOF_FLOAT128__ -# define FMT_USE_FLOAT128 1 -# else +# ifdef __clang__ +// Clang C++ emulates GCC, so it has to appear early. +# if defined(__has_include) +# if __has_include() +# define FMT_USE_FLOAT128 1 +# endif +# endif +# elif defined(__GNUC__) +// GNU C++: +# if defined(_GLIBCXX_USE_FLOAT128) && !defined(__STRICT_ANSI__) +# define FMT_USE_FLOAT128 1 +# endif +# endif +# ifndef FMT_USE_FLOAT128 # define FMT_USE_FLOAT128 0 # endif #endif + #if FMT_USE_FLOAT128 using float128 = __float128; #else