On Thu, Jul 17, 2025 at 1:19 AM Jonathan Wakely <jwak...@redhat.com> wrote:

> The __promoted_t alias is only defined when __cpp_fold_expressions is
> defined, which might not be the case for some hypothetical C++17
> compilers.
>
> Change the 3-arg std::hypot to just use __gnu_cxx::__promote_3 which is
> always available.
>
> libstdc++-v3/ChangeLog:
>
>         PR libstdc++/121097
>         * include/c_global/cmath (hypot): Use __promote_3 instead of
>         __promoted.
> ---
>
> Patch v2 just uses Tomasz's suggestion to use __promote_3 in std:hypot,
> which is much simpler than adding a fallback definition of __promoted_t.
>
> Tested x86_64-linux.
>
LGTM.

>
>  libstdc++-v3/include/c_global/cmath | 4 ++--
>  1 file changed, 2 insertions(+), 2 deletions(-)
>
> diff --git a/libstdc++-v3/include/c_global/cmath
> b/libstdc++-v3/include/c_global/cmath
> index 27c21ca19eb6..65a3b8144f35 100644
> --- a/libstdc++-v3/include/c_global/cmath
> +++ b/libstdc++-v3/include/c_global/cmath
> @@ -3792,10 +3792,10 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
>    { return std::__hypot3<long double>(__x, __y, __z); }
>
>    template<typename _Tp, typename _Up, typename _Vp>
> -    __gnu_cxx::__promoted_t<_Tp, _Up, _Vp>
> +    typename __gnu_cxx::__promote_3<_Tp, _Up, _Vp>::__type
>      hypot(_Tp __x, _Up __y, _Vp __z)
>      {
> -      using __type = __gnu_cxx::__promoted_t<_Tp, _Up, _Vp>;
> +      using __type = typename __gnu_cxx::__promote_3<_Tp, _Up,
> _Vp>::__type;
>        return std::__hypot3<__type>(__x, __y, __z);
>      }
>
> --
> 2.50.1
>
>

Reply via email to