| //===----------------------------------------------------------------------===// |
| // |
| // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. |
| // See https://llvm.org/LICENSE.txt for license information. |
| // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception |
| // |
| //===----------------------------------------------------------------------===// |
| #ifndef LIBCXX_TEST_CONCEPTS_LANG_CONCEPTS_ARITHMETIC_H_ |
| #define LIBCXX_TEST_CONCEPTS_LANG_CONCEPTS_ARITHMETIC_H_ |
| |
| #include <concepts> |
| |
| // This overload should never be called. It exists solely to force subsumption. |
| template <std::integral I> |
| constexpr bool CheckSubsumption(I) { |
| return false; |
| } |
| |
| // clang-format off |
| template <std::integral I> |
| requires std::signed_integral<I> && (!std::unsigned_integral<I>) |
| constexpr bool CheckSubsumption(I) { |
| return std::is_signed_v<I>; |
| } |
| |
| template <std::integral I> |
| requires std::unsigned_integral<I> && (!std::signed_integral<I>) |
| constexpr bool CheckSubsumption(I) { |
| return std::is_unsigned_v<I>; |
| } |
| // clang-format on |
| |
| enum ClassicEnum { a, b, c }; |
| enum class ScopedEnum { x, y, z }; |
| struct EmptyStruct {}; |
| |
| #endif // LIBCXX_TEST_CONCEPTS_LANG_CONCEPTS_ARITHMETIC_H_ |