diff options
author | Jonathan Wakely <jwakely@redhat.com> | 2022-09-29 11:30:05 +0100 |
---|---|---|
committer | Jonathan Wakely <jwakely@redhat.com> | 2022-09-29 12:47:37 +0100 |
commit | df7f2736509cfe5e1dd7d9f263355c5043347a9c (patch) | |
tree | 1b652a884d94d32fda304908fdb83f8598d71398 | |
parent | a1f7f9541c2b20eb44750b9c15cd831c62d67f21 (diff) | |
download | gcc-df7f2736509cfe5e1dd7d9f263355c5043347a9c.zip gcc-df7f2736509cfe5e1dd7d9f263355c5043347a9c.tar.gz gcc-df7f2736509cfe5e1dd7d9f263355c5043347a9c.tar.bz2 |
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_<is_reference<_Tp>,
__not_<is_reference<_Res_t>>,
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.
-rw-r--r-- | libstdc++-v3/include/std/type_traits | 7 |
1 files changed, 6 insertions, 1 deletions
diff --git a/libstdc++-v3/include/std/type_traits b/libstdc++-v3/include/std/type_traits index 22c1af2..a015fd9 100644 --- a/libstdc++-v3/include/std/type_traits +++ b/libstdc++-v3/include/std/type_traits @@ -2901,7 +2901,12 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION template<typename _Tp, bool _Nothrow = noexcept(_S_conv<_Tp>(_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); |