diff options
author | Jonathan Wakely <jwakely@redhat.com> | 2022-07-19 10:55:52 +0100 |
---|---|---|
committer | Jonathan Wakely <jwakely@redhat.com> | 2022-07-19 15:12:27 +0100 |
commit | 465802c0d40adca5fd5b0a2af6ff8a323a55b589 (patch) | |
tree | 84201afac23508847598e7bd7815f187543914a2 | |
parent | 4a8aab9a23550dbf53d4640fef57c0bd6f6b0129 (diff) | |
download | gcc-465802c0d40adca5fd5b0a2af6ff8a323a55b589.zip gcc-465802c0d40adca5fd5b0a2af6ff8a323a55b589.tar.gz gcc-465802c0d40adca5fd5b0a2af6ff8a323a55b589.tar.bz2 |
c++: Enable __has_builtin for new reference binding built-ins
The new built-ins need to be detectable using __has_builtin, and the
library should use that to check for them.
This fixes an error with Clang when C++23 is enabled.
gcc/cp/ChangeLog:
* cp-objcp-common.cc (names_builtin_p): Return true for
RID_REF_CONSTRUCTS_FROM_TEMPORARY and
RID_REF_CONVERTS_FROM_TEMPORARY.
libstdc++-v3/ChangeLog:
* include/std/type_traits (__cpp_lib_reference_from_temporary)
(reference_constructs_from_temporary)
(reference_converts_from_temporary): Only define when the
built-ins are available.
-rw-r--r-- | gcc/cp/cp-objcp-common.cc | 2 | ||||
-rw-r--r-- | libstdc++-v3/include/std/type_traits | 4 |
2 files changed, 6 insertions, 0 deletions
diff --git a/gcc/cp/cp-objcp-common.cc b/gcc/cp/cp-objcp-common.cc index 0b70d55..4079a4b 100644 --- a/gcc/cp/cp-objcp-common.cc +++ b/gcc/cp/cp-objcp-common.cc @@ -461,6 +461,8 @@ names_builtin_p (const char *name) case RID_IS_ASSIGNABLE: case RID_IS_CONSTRUCTIBLE: case RID_UNDERLYING_TYPE: + case RID_REF_CONSTRUCTS_FROM_TEMPORARY: + case RID_REF_CONVERTS_FROM_TEMPORARY: return true; default: break; diff --git a/libstdc++-v3/include/std/type_traits b/libstdc++-v3/include/std/type_traits index b1a1dee..14b029c 100644 --- a/libstdc++-v3/include/std/type_traits +++ b/libstdc++-v3/include/std/type_traits @@ -3505,6 +3505,9 @@ template<typename _Ret, typename _Fn, typename... _Args> template<typename _Tp> inline constexpr bool is_scoped_enum_v = is_scoped_enum<_Tp>::value; +#if __has_builtin(__reference_constructs_from_temporary) \ + && __has_builtin(__reference_converts_from_temporary) + #define __cpp_lib_reference_from_temporary 202202L /// True if _Tp is a reference type, a _Up value can be bound to _Tp in @@ -3544,6 +3547,7 @@ template<typename _Ret, typename _Fn, typename... _Args> template<typename _Tp, typename _Up> inline constexpr bool reference_converts_from_temporary_v = reference_converts_from_temporary<_Tp, _Up>::value; +#endif // __has_builtin for reference_from_temporary #endif // C++23 #if _GLIBCXX_HAVE_IS_CONSTANT_EVALUATED |