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

Message ID 20221005124628.701564-1-jwakely@redhat.com
State New, archived
Headers
Series [committed] libstdc++: Guard use of new built-in with __has_builtin |

Commit Message

Jonathan Wakely Oct. 5, 2022, 12:46 p.m. UTC
  Tested x86_64-linux, pushed to trunk.

-- >8 --

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.
---
 libstdc++-v3/include/bits/invoke.h | 2 ++
 1 file changed, 2 insertions(+)
  

Patch

diff --git a/libstdc++-v3/include/bits/invoke.h b/libstdc++-v3/include/bits/invoke.h
index 8724a764f73..8fa8cf876d8 100644
--- a/libstdc++-v3/include/bits/invoke.h
+++ b/libstdc++-v3/include/bits/invoke.h
@@ -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)...);