Skip to content

Commit ccb76b5

Browse files
committed
[libc++] Use __is_scoped_enum for the implementation of is_scoped_enum if it's available
1 parent 662010e commit ccb76b5

File tree

1 file changed

+16
-1
lines changed

1 file changed

+16
-1
lines changed

libcxx/include/__type_traits/is_scoped_enum.h

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,18 @@
2222
_LIBCPP_BEGIN_NAMESPACE_STD
2323

2424
#if _LIBCPP_STD_VER >= 23
25+
26+
// TODO: GCC and Clang both have this builtin. Remove the false case once we've updated to GCC 14.
27+
# if __has_builtin(__is_scoped_enum)
28+
29+
template <class _Tp>
30+
struct _LIBCPP_TEMPLATE_VIS is_scoped_enum : bool_constant<__is_scoped_enum(_Tp)> {};
31+
32+
template <class _Tp>
33+
inline constexpr bool is_scoped_enum_v = __is_scoped_enum(_Tp);
34+
35+
# else
36+
2537
template <class _Tp, bool = is_enum_v<_Tp> >
2638
struct __is_scoped_enum_helper : false_type {};
2739

@@ -33,7 +45,10 @@ struct _LIBCPP_TEMPLATE_VIS is_scoped_enum : public __is_scoped_enum_helper<_Tp>
3345

3446
template <class _Tp>
3547
inline constexpr bool is_scoped_enum_v = is_scoped_enum<_Tp>::value;
36-
#endif
48+
49+
# endif // __has_builtin(__is_scoped_enum)
50+
51+
#endif // _LIBCPP_STD_VER >= 23
3752

3853
_LIBCPP_END_NAMESPACE_STD
3954

0 commit comments

Comments
 (0)