[committed] libstdc++: Guard use of new built-in with __has_builtin
Jonathan Wakely
jwakely@redhat.com
Wed Oct 5 12:46:28 GMT 2022
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(+)
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)...);
--
2.37.3
More information about the Libstdc++
mailing list