//===----------------------------------------------------------------------===// // // 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, c++20 // type_traits // is_scoped_enum // C++23 #include #include // for std::nullptr_t #include "test_macros.h" template void test_positive() { static_assert(std::is_scoped_enum::value); static_assert(std::is_scoped_enum::value); static_assert(std::is_scoped_enum::value); static_assert(std::is_scoped_enum::value); static_assert(std::is_scoped_enum_v); static_assert(std::is_scoped_enum_v); static_assert(std::is_scoped_enum_v); static_assert(std::is_scoped_enum_v); } template void test_negative() { static_assert(!std::is_scoped_enum::value); static_assert(!std::is_scoped_enum::value); static_assert(!std::is_scoped_enum::value); static_assert(!std::is_scoped_enum::value); static_assert(!std::is_scoped_enum_v); static_assert(!std::is_scoped_enum_v); static_assert(!std::is_scoped_enum_v); static_assert(!std::is_scoped_enum_v); } class Empty {}; class NotEmpty { virtual ~NotEmpty(); }; union Union {}; struct bit_zero { int : 0; }; class Abstract { virtual ~Abstract() = 0; }; enum Enum { zero, one }; enum class CEnum1 { zero, one }; enum class CEnum2; enum class CEnum3 : short; struct incomplete_type; using FunctionPtr = void (*)(); using FunctionType = void(); struct TestMembers { static int static_method(int) { return 0; } int method() { return 0; } enum E1 { m_zero, m_one }; enum class CE1; }; void func1(); int func2(int); int main(int, char**) { test_positive(); test_positive(); test_positive(); test_positive(); test_negative(); test_negative(); test_negative(); test_negative(); test_negative(); test_negative(); test_negative(); test_negative(); test_negative(); test_negative(); test_negative(); test_negative(); test_negative(); test_negative(); test_negative(); test_negative(); test_negative(); test_negative(); test_negative(); test_negative(); test_negative(); test_negative(); test_negative(); test_negative(); test_negative(); test_negative(); test_negative(); test_negative(); test_negative(); return 0; }