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.
This commit is contained in:
parent
a1f7f9541c
commit
df7f273650
1 changed files with 6 additions and 1 deletions
|
@ -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);
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue