https://gcc.gnu.org/bugzilla/show_bug.cgi?id=109818

--- Comment #10 from Jonathan Wakely <redi at gcc dot gnu.org> ---
(In reply to Janez Zemva from comment #8)
> I took a look and I believe the c_global is already being selected and I
> believe the hack I presented should perhaps be applied to
> libstdc++-v3/include/c_global/cmath 

No, absolutely not, std::trunc is already defined in that file, see line 2023:

  using ::trunc;
  using ::truncf;
  using ::truncl;

And then at line 2642:

#ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_FP
  constexpr float
  trunc(float __x)
  { return __builtin_truncf(__x); }

  constexpr long double
  trunc(long double __x)
  { return __builtin_truncl(__x); }
#endif

#ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_INT
  template<typename _Tp>
    constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, 
                                              double>::__type
    trunc(_Tp __x)
    { return __builtin_trunc(__x); }
#endif


(In reply to Janez Zemva from comment #9)
> I'd also like to mention, that the hack is already present in the c_global
> cmath file, but is perhaps in a wrong section of the file, i.e. it is in the
> section protected by:
> 
> #if defined(__STDCPP_FLOAT64_T__) &&
> defined(_GLIBCXX_DOUBLE_IS_IEEE_BINARY64)
> 
> while I can see _GLIBCXX_DOUBLE_IS_IEEE_BINARY64 is defined in c++config.h,
> I don't see __STDCPP_FLOAT64_T__ defined anywhere.

No, you're looking at the definition for trunc(_Float64) which is a completely
different overload.

Reply via email to