From: Jonathan Wakely Date: Thu, 29 Sep 2022 10:30:05 +0000 (+0100) Subject: libstdc++: Guard use of new built-in with __has_builtin X-Git-Tag: basepoints/gcc-14~4253 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=df7f2736509cfe5e1dd7d9f263355c5043347a9c;p=thirdparty%2Fgcc.git libstdc++: Guard use of new built-in with __has_builtin I forgot that non-GCC compilers don't have this built-in yet. For Clang we could do something like the check below (as described in P2255), but for now I'm just fixing the regression. #if __has_builtin((__reference_binds_to_temporary) bool _Dangle = __reference_binds_to_temporary(_Tp, _Res_t) && __and_, __not_>, is_convertible<__remove_cvref_t<_Res_t>*, __remove_cvref_t<_Tp>*>>::value #endif libstdc++-v3/ChangeLog: * include/std/type_traits (__is_invocable_impl): Check __has_builtin(__reference_converts_from_temporary) before using built-in. --- diff --git a/libstdc++-v3/include/std/type_traits b/libstdc++-v3/include/std/type_traits index 22c1af26397e..a015fd95a719 100644 --- a/libstdc++-v3/include/std/type_traits +++ b/libstdc++-v3/include/std/type_traits @@ -2901,7 +2901,12 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION template(_S_get())), typename = decltype(_S_conv<_Tp>(_S_get())), - bool _Dangle = __reference_converts_from_temporary(_Tp, _Res_t)> +#if __has_builtin(__reference_converts_from_temporary) + bool _Dangle = __reference_converts_from_temporary(_Tp, _Res_t) +#else + bool _Dangle = false +#endif + > static __bool_constant<_Nothrow && !_Dangle> _S_test(int);