// DR 2836 - Conversion rank of long double and extended floating-point types // { dg-do compile { target c++23 } } // { dg-additional-options "-mlong-double-64" { target powerpc*-*-* s390*-*-* } } #include <stdfloat> #if defined (__STDCPP_FLOAT64_T__) \ && __LDBL_MAX_EXP__ == __FLT64_MAX_EXP__ \ && __LDBL_MANT_DIG__ == __FLT64_MANT_DIG__ \ && __DBL_MAX_EXP__ == __FLT64_MAX_EXP__ \ && __DBL_MANT_DIG__ == __FLT64_MANT_DIG__ auto foo (long double x, std::float64_t y) { return x + y; } template<typename T, T v> struct integral_constant { static constexpr T value = v; }; typedef integral_constant<bool, false> false_type; typedef integral_constant<bool, true> true_type; template<class T, class U> struct is_same : false_type {}; template <class T> struct is_same<T, T> : true_type {}; static_assert (is_same <decltype (foo (1.0L, 1.0F64)), long double>::value); #endif