libstdc++: Guard use of new built-in with __has_builtin

Another case where I forgot that non-GCC compilers don't have this
built-in yet.

libstdc++-v3/ChangeLog:

	* include/bits/invoke.h (__invoke_r): Check
	__has_builtin(__reference_converts_from_temporary) before using
	built-in.
This commit is contained in:
Jonathan Wakely 2022-09-29 11:30:05 +01:00
parent 4c451631f7
commit dc70f3f81b

View File

@ -130,8 +130,10 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
{
using __result = __invoke_result<_Callable, _Args...>;
using __type = typename __result::type;
#if __has_builtin(__reference_converts_from_temporary)
static_assert(!__reference_converts_from_temporary(_Res, __type),
"INVOKE<R> must not create a dangling reference");
#endif
using __tag = typename __result::__invoke_type;
return std::__invoke_impl<__type>(__tag{}, std::forward<_Callable>(__fn),
std::forward<_Args>(__args)...);