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

Reply via email to