//===----------------------------------------------------------------------===// // // 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 // constexpr T bit_ceil(T x) noexcept; // Remarks: This function shall not participate in overload resolution unless // T is an unsigned integer type #include #include #include #include #include class A{}; enum E1 : unsigned char { rEd }; enum class E2 : unsigned char { red }; template constexpr bool toobig() { return 0 == std::bit_ceil(std::numeric_limits::max()); } int main(int, char**) { // Make sure we generate a compile-time error for UB static_assert(toobig(), ""); // expected-error {{static assertion expression is not an integral constant expression}} static_assert(toobig(), ""); // expected-error {{static assertion expression is not an integral constant expression}} static_assert(toobig(), ""); // expected-error {{static assertion expression is not an integral constant expression}} static_assert(toobig(), ""); // expected-error {{static assertion expression is not an integral constant expression}} static_assert(toobig(), ""); // expected-error {{static assertion expression is not an integral constant expression}} static_assert(toobig(), ""); // expected-error {{static assertion expression is not an integral constant expression}} static_assert(toobig(), ""); // expected-error {{static assertion expression is not an integral constant expression}} static_assert(toobig(), ""); // expected-error {{static assertion expression is not an integral constant expression}} static_assert(toobig(), ""); // expected-error {{static assertion expression is not an integral constant expression}} static_assert(toobig(), ""); // expected-error {{static assertion expression is not an integral constant expression}} static_assert(toobig(), ""); // expected-error {{static assertion expression is not an integral constant expression}} static_assert(toobig(), ""); // expected-error {{static assertion expression is not an integral constant expression}} return 0; }