//===----------------------------------------------------------------------===// // // 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 // //===----------------------------------------------------------------------===// // UNSUPPORTED: c++03, c++11, c++14, c++17 // template // concept signed_integral = // see below #include #include #include "arithmetic.h" #include "test_macros.h" template constexpr bool CheckSignedIntegralQualifiers() { constexpr bool result = std::signed_integral; static_assert(std::signed_integral == result); static_assert(std::signed_integral == result); static_assert(std::signed_integral == result); static_assert(!std::signed_integral); static_assert(!std::signed_integral); static_assert(!std::signed_integral); static_assert(!std::signed_integral); static_assert(!std::signed_integral); static_assert(!std::signed_integral); static_assert(!std::signed_integral); static_assert(!std::signed_integral); static_assert(!std::signed_integral); static_assert(!std::signed_integral); static_assert(!std::signed_integral); static_assert(!std::signed_integral); static_assert(!std::signed_integral); static_assert(!std::signed_integral); static_assert(!std::signed_integral); return result; } // standard signed integers static_assert(CheckSignedIntegralQualifiers()); static_assert(CheckSignedIntegralQualifiers()); static_assert(CheckSignedIntegralQualifiers()); static_assert(CheckSignedIntegralQualifiers()); static_assert(CheckSignedIntegralQualifiers()); // bool and character *may* be signed static_assert(CheckSignedIntegralQualifiers() == std::is_signed_v); static_assert(CheckSignedIntegralQualifiers() == std::is_signed_v); static_assert(CheckSignedIntegralQualifiers() == std::is_signed_v); static_assert(CheckSignedIntegralQualifiers() == std::is_signed_v); static_assert(CheckSignedIntegralQualifiers() == std::is_signed_v); static_assert(CheckSignedIntegralQualifiers() == std::is_signed_v); // integers that aren't signed integrals static_assert(!CheckSignedIntegralQualifiers()); static_assert(!CheckSignedIntegralQualifiers()); static_assert(!CheckSignedIntegralQualifiers()); static_assert(!CheckSignedIntegralQualifiers()); static_assert(!CheckSignedIntegralQualifiers()); // extended integers #ifndef TEST_HAS_NO_INT128 static_assert(CheckSignedIntegralQualifiers<__int128_t>()); static_assert(!CheckSignedIntegralQualifiers<__uint128_t>()); #endif // types that aren't even integers shouldn't be signed integers! static_assert(!std::signed_integral); static_assert(!CheckSignedIntegralQualifiers()); static_assert(!CheckSignedIntegralQualifiers()); static_assert(!CheckSignedIntegralQualifiers()); static_assert(!CheckSignedIntegralQualifiers()); static_assert(!CheckSignedIntegralQualifiers()); static_assert(!CheckSignedIntegralQualifiers()); static_assert(!CheckSignedIntegralQualifiers()); static_assert(!CheckSignedIntegralQualifiers()); static_assert(CheckSubsumption(0)); static_assert(CheckSubsumption(0U));