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.
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;
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
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