30#ifndef _GLIBCXX_INTCMP_H
31#define _GLIBCXX_INTCMP_H 1
34#pragma GCC system_header
39#ifdef __glibcxx_integer_comparison_functions
44namespace std _GLIBCXX_VISIBILITY(default)
46_GLIBCXX_BEGIN_NAMESPACE_VERSION
48 template<
typename _Tp,
typename _Up>
50 cmp_equal(_Tp __t, _Up __u)
noexcept
52 static_assert(__is_signed_or_unsigned_integer<_Tp>::value);
53 static_assert(__is_signed_or_unsigned_integer<_Up>::value);
55 if constexpr (is_signed_v<_Tp> == is_signed_v<_Up>)
57 else if constexpr (is_signed_v<_Tp>)
63 template<
typename _Tp,
typename _Up>
65 cmp_not_equal(_Tp __t, _Up __u)
noexcept
66 {
return !std::cmp_equal(__t, __u); }
68 template<
typename _Tp,
typename _Up>
70 cmp_less(_Tp __t, _Up __u)
noexcept
72 static_assert(__is_signed_or_unsigned_integer<_Tp>::value);
73 static_assert(__is_signed_or_unsigned_integer<_Up>::value);
75 if constexpr (is_signed_v<_Tp> == is_signed_v<_Up>)
77 else if constexpr (is_signed_v<_Tp>)
80 return __u >= 0 && __t < make_unsigned_t<_Up>(__u);
83 template<
typename _Tp,
typename _Up>
85 cmp_greater(_Tp __t, _Up __u)
noexcept
86 {
return std::cmp_less(__u, __t); }
88 template<
typename _Tp,
typename _Up>
90 cmp_less_equal(_Tp __t, _Up __u)
noexcept
91 {
return !std::cmp_less(__u, __t); }
93 template<
typename _Tp,
typename _Up>
95 cmp_greater_equal(_Tp __t, _Up __u)
noexcept
96 {
return !std::cmp_less(__t, __u); }
98 template<
typename _Res,
typename _Tp>
100 in_range(_Tp __t)
noexcept
102 static_assert(__is_signed_or_unsigned_integer<_Res>::value);
103 static_assert(__is_signed_or_unsigned_integer<_Tp>::value);
106 if constexpr (is_signed_v<_Tp> == is_signed_v<_Res>)
107 return __int_traits<_Res>::__min <= __t
108 && __t <= __int_traits<_Res>::__max;
109 else if constexpr (is_signed_v<_Tp>)
113 return __t <= make_unsigned_t<_Res>(__int_traits<_Res>::__max);
116_GLIBCXX_END_NAMESPACE_VERSION
typename make_unsigned< _Tp >::type make_unsigned_t
Alias template for make_unsigned.
ISO C++ entities toplevel namespace is std.
__numeric_traits_integer< _Tp > __int_traits
Convenience alias for __numeric_traits<integer-type>.