aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJonathan Wakely <jwakely@redhat.com>2022-09-29 11:30:05 +0100
committerJonathan Wakely <jwakely@redhat.com>2022-10-05 13:39:28 +0100
commitdc70f3f81bb980b69a1910c2e6d3774ddd716846 (patch)
treed476048a76f4f31d119e8ccc7c02463ddfede94c
parent4c451631f722c9939260a5c2fc209802a47e525f (diff)
downloadgcc-dc70f3f81bb980b69a1910c2e6d3774ddd716846.zip
gcc-dc70f3f81bb980b69a1910c2e6d3774ddd716846.tar.gz
gcc-dc70f3f81bb980b69a1910c2e6d3774ddd716846.tar.bz2
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.
-rw-r--r--libstdc++-v3/include/bits/invoke.h2
1 files changed, 2 insertions, 0 deletions
diff --git a/libstdc++-v3/include/bits/invoke.h b/libstdc++-v3/include/bits/invoke.h
index 8724a76..8fa8cf8 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)...);