//===----------------------------------------------------------------------===// // // 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 // SPDX-FileCopyrightText: Copyright (c) 2023 NVIDIA CORPORATION & AFFILIATES. // //===----------------------------------------------------------------------===// // template // concept integral = // see below #include #include #include "arithmetic.h" #include "test_macros.h" using cuda::std::integral; template __host__ __device__ constexpr bool CheckIntegralQualifiers() { constexpr bool result = integral; static_assert(integral == result, ""); static_assert(integral == result, ""); static_assert(integral == result, ""); static_assert(!integral, ""); static_assert(!integral, ""); static_assert(!integral, ""); static_assert(!integral, ""); static_assert(!integral, ""); static_assert(!integral, ""); static_assert(!integral, ""); static_assert(!integral, ""); static_assert(!integral, ""); static_assert(!integral, ""); static_assert(!integral, ""); static_assert(!integral, ""); static_assert(!integral, ""); static_assert(!integral, ""); static_assert(!integral, ""); return result; } // standard signed and unsigned integers static_assert(CheckIntegralQualifiers(), ""); static_assert(CheckIntegralQualifiers(), ""); static_assert(CheckIntegralQualifiers(), ""); static_assert(CheckIntegralQualifiers(), ""); static_assert(CheckIntegralQualifiers(), ""); static_assert(CheckIntegralQualifiers(), ""); static_assert(CheckIntegralQualifiers(), ""); static_assert(CheckIntegralQualifiers(), ""); static_assert(CheckIntegralQualifiers(), ""); static_assert(CheckIntegralQualifiers(), ""); // extended integers #if _CCCL_HAS_INT128() static_assert(CheckIntegralQualifiers<__int128_t>(), ""); static_assert(CheckIntegralQualifiers<__uint128_t>(), ""); #endif // bool and char types are also integral static_assert(CheckIntegralQualifiers(), ""); static_assert(CheckIntegralQualifiers(), ""); static_assert(CheckIntegralQualifiers(), ""); #if TEST_STD_VER > 2017 && defined(__cpp_char8_t) static_assert(CheckIntegralQualifiers(), ""); #endif // TEST_STD_VER > 2017 && defined(__cpp_char8_t) static_assert(CheckIntegralQualifiers(), ""); static_assert(CheckIntegralQualifiers(), ""); // types that aren't integral static_assert(!integral, ""); static_assert(!CheckIntegralQualifiers(), ""); static_assert(!CheckIntegralQualifiers(), ""); static_assert(!CheckIntegralQualifiers(), ""); static_assert(!CheckIntegralQualifiers(), ""); static_assert(!CheckIntegralQualifiers(), ""); static_assert(!CheckIntegralQualifiers(), ""); static_assert(!CheckIntegralQualifiers(), ""); static_assert(!CheckIntegralQualifiers(), ""); #if TEST_STD_VER > 2017 static_assert(CheckSubsumption(0), ""); static_assert(CheckSubsumption(0U), ""); #endif // TEST_STD_VER > 2017 int main(int, char**) { return 0; }