| // RUN: %clang_cc1 -std=c++20 %s -verify |
| // expected-no-diagnostics |
| |
| #include "Inputs/std-compare.h" |
| |
| struct S { |
| _BitInt(12) a; |
| |
| constexpr operator _BitInt(12)() const { return a; } |
| }; |
| |
| // None of these used to compile because we weren't adding _BitInt types to the |
| // overload set for builtin operators. See GH82998. |
| static_assert(S{10} < 11); |
| static_assert(S{10} <= 11); |
| static_assert(S{12} > 11); |
| static_assert(S{12} >= 11); |
| static_assert(S{10} == 10); |
| static_assert((S{10} <=> 10) == 0); |
| static_assert(S{10} != 11); |
| static_assert(S{10} + 0 == 10); |
| static_assert(S{10} - 0 == 10); |
| static_assert(S{10} * 1 == 10); |
| static_assert(S{10} / 1 == 10); |
| static_assert(S{10} % 1 == 0); |
| static_assert(S{10} << 0 == 10); |
| static_assert(S{10} >> 0 == 10); |
| static_assert((S{10} | 0) == 10); |
| static_assert((S{10} & 10) == 10); |
| static_assert((S{10} ^ 0) == 10); |
| static_assert(-S{10} == -10); |
| static_assert(+S{10} == +10); |
| static_assert(~S{10} == ~10); |
| |
| struct A { |
| _BitInt(12) a; |
| |
| bool operator==(const A&) const = default; |
| bool operator!=(const A&) const = default; |
| std::strong_ordering operator<=>(const A&) const = default; |
| }; |
| |