From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: by sourceware.org (Postfix, from userid 2181) id 76E7F3858D3C; Thu, 29 Sep 2022 11:47:49 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 76E7F3858D3C DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gcc.gnu.org; s=default; t=1664452069; bh=m3xgI3MXOoTF1+unPeNTm0u556o6AfV6iwcCDuEcbCQ=; h=From:To:Subject:Date:From; b=vuoDIrmmEPwikEgp/O2T79pOpYgYy9QQUckXC5WUnFsLLx1aTSSty7fMlY6AbyANm B3iNukjJSZqNysg8sQ/jra+Ac28nF5Ikf98hgZ2kLFdMgFACotgHy+ZMe79u1QwKMF 4x3rOy7XZQowtRn+IjSmjgv/F1+n8ku3P2S/ZnIo= MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Type: text/plain; charset="utf-8" From: Jonathan Wakely To: gcc-cvs@gcc.gnu.org, libstdc++-cvs@gcc.gnu.org Subject: [gcc r13-2954] libstdc++: Guard use of new built-in with __has_builtin X-Act-Checkin: gcc X-Git-Author: Jonathan Wakely X-Git-Refname: refs/heads/master X-Git-Oldrev: a1f7f9541c2b20eb44750b9c15cd831c62d67f21 X-Git-Newrev: df7f2736509cfe5e1dd7d9f263355c5043347a9c Message-Id: <20220929114749.76E7F3858D3C@sourceware.org> Date: Thu, 29 Sep 2022 11:47:49 +0000 (GMT) List-Id: https://gcc.gnu.org/g:df7f2736509cfe5e1dd7d9f263355c5043347a9c commit r13-2954-gdf7f2736509cfe5e1dd7d9f263355c5043347a9c Author: Jonathan Wakely Date: Thu Sep 29 11:30:05 2022 +0100 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: --- libstdc++-v3/include/std/type_traits | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/libstdc++-v3/include/std/type_traits b/libstdc++-v3/include/std/type_traits index 22c1af26397..a015fd95a71 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);