Skip to content

Commit e8f1902

Browse files
authored
[libc++] Add a test to make sure the type traits derive from integral_constant (#120732)
1 parent 1b9805c commit e8f1902

File tree

1 file changed

+116
-0
lines changed

1 file changed

+116
-0
lines changed
Lines changed: 116 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,116 @@
1+
//===----------------------------------------------------------------------===//
2+
//
3+
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4+
// See https://llvm.org/LICENSE.txt for license information.
5+
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6+
//
7+
//===----------------------------------------------------------------------===//
8+
9+
// UNSUPPORTED: c++03
10+
11+
// Check that type traits derive from integral_constant
12+
13+
// ADDITIONAL_COMPILE_FLAGS: -D_LIBCPP_DISABLE_DEPRECATION_WARNINGS
14+
15+
#include <cstddef>
16+
#include <type_traits>
17+
18+
#include "test_macros.h"
19+
20+
static_assert(std::is_base_of<std::false_type, std::is_void<int>>::value, "");
21+
static_assert(std::is_base_of<std::true_type, std::is_integral<int>>::value, "");
22+
static_assert(std::is_base_of<std::false_type, std::is_floating_point<int>>::value, "");
23+
static_assert(std::is_base_of<std::false_type, std::is_array<int>>::value, "");
24+
static_assert(std::is_base_of<std::false_type, std::is_enum<int>>::value, "");
25+
static_assert(std::is_base_of<std::false_type, std::is_union<int>>::value, "");
26+
static_assert(std::is_base_of<std::false_type, std::is_class<int>>::value, "");
27+
static_assert(std::is_base_of<std::false_type, std::is_function<int>>::value, "");
28+
static_assert(std::is_base_of<std::false_type, std::is_pointer<int>>::value, "");
29+
static_assert(std::is_base_of<std::false_type, std::is_lvalue_reference<int>>::value, "");
30+
static_assert(std::is_base_of<std::false_type, std::is_rvalue_reference<int>>::value, "");
31+
static_assert(std::is_base_of<std::false_type, std::is_member_object_pointer<int>>::value, "");
32+
static_assert(std::is_base_of<std::false_type, std::is_member_function_pointer<int>>::value, "");
33+
static_assert(std::is_base_of<std::true_type, std::is_fundamental<int>>::value, "");
34+
static_assert(std::is_base_of<std::true_type, std::is_arithmetic<int>>::value, "");
35+
static_assert(std::is_base_of<std::true_type, std::is_scalar<int>>::value, "");
36+
static_assert(std::is_base_of<std::false_type, std::is_object<int&>>::value, "");
37+
static_assert(std::is_base_of<std::false_type, std::is_compound<int>>::value, "");
38+
static_assert(std::is_base_of<std::false_type, std::is_reference<int>>::value, "");
39+
static_assert(std::is_base_of<std::false_type, std::is_member_pointer<int>>::value, "");
40+
static_assert(std::is_base_of<std::false_type, std::is_const<int>>::value, "");
41+
static_assert(std::is_base_of<std::false_type, std::is_volatile<int>>::value, "");
42+
static_assert(std::is_base_of<std::true_type, std::is_trivial<int>>::value, "");
43+
static_assert(std::is_base_of<std::true_type, std::is_trivially_copyable<int>>::value, "");
44+
static_assert(std::is_base_of<std::true_type, std::is_standard_layout<int>>::value, "");
45+
static_assert(std::is_base_of<std::true_type, std::is_pod<int>>::value, "");
46+
static_assert(std::is_base_of<std::false_type, std::is_empty<int>>::value, "");
47+
static_assert(std::is_base_of<std::false_type, std::is_polymorphic<int>>::value, "");
48+
static_assert(std::is_base_of<std::false_type, std::is_abstract<int>>::value, "");
49+
static_assert(std::is_base_of<std::true_type, std::is_signed<int>>::value, "");
50+
static_assert(std::is_base_of<std::false_type, std::is_unsigned<int>>::value, "");
51+
static_assert(std::is_base_of<std::true_type, std::is_constructible<int>>::value, "");
52+
static_assert(std::is_base_of<std::true_type, std::is_trivially_constructible<int>>::value, "");
53+
static_assert(std::is_base_of<std::true_type, std::is_nothrow_constructible<int>>::value, "");
54+
static_assert(std::is_base_of<std::true_type, std::is_default_constructible<int>>::value, "");
55+
static_assert(std::is_base_of<std::true_type, std::is_trivially_default_constructible<int>>::value, "");
56+
static_assert(std::is_base_of<std::true_type, std::is_nothrow_default_constructible<int>>::value, "");
57+
static_assert(std::is_base_of<std::true_type, std::is_copy_constructible<int>>::value, "");
58+
static_assert(std::is_base_of<std::true_type, std::is_trivially_copy_constructible<int>>::value, "");
59+
static_assert(std::is_base_of<std::true_type, std::is_nothrow_copy_constructible<int>>::value, "");
60+
static_assert(std::is_base_of<std::true_type, std::is_move_constructible<int>>::value, "");
61+
static_assert(std::is_base_of<std::true_type, std::is_trivially_move_constructible<int>>::value, "");
62+
static_assert(std::is_base_of<std::true_type, std::is_nothrow_move_constructible<int>>::value, "");
63+
static_assert(std::is_base_of<std::false_type, std::is_assignable<int, int>>::value, "");
64+
static_assert(std::is_base_of<std::false_type, std::is_trivially_assignable<int, int>>::value, "");
65+
static_assert(std::is_base_of<std::false_type, std::is_nothrow_assignable<int, int>>::value, "");
66+
static_assert(std::is_base_of<std::true_type, std::is_copy_assignable<int>>::value, "");
67+
static_assert(std::is_base_of<std::true_type, std::is_trivially_copy_assignable<int>>::value, "");
68+
static_assert(std::is_base_of<std::true_type, std::is_nothrow_copy_assignable<int>>::value, "");
69+
static_assert(std::is_base_of<std::true_type, std::is_move_assignable<int>>::value, "");
70+
static_assert(std::is_base_of<std::true_type, std::is_trivially_move_assignable<int>>::value, "");
71+
static_assert(std::is_base_of<std::true_type, std::is_nothrow_move_assignable<int>>::value, "");
72+
static_assert(std::is_base_of<std::true_type, std::is_destructible<int>>::value, "");
73+
static_assert(std::is_base_of<std::true_type, std::is_trivially_destructible<int>>::value, "");
74+
static_assert(std::is_base_of<std::true_type, std::is_nothrow_destructible<int>>::value, "");
75+
static_assert(std::is_base_of<std::false_type, std::has_virtual_destructor<int>>::value, "");
76+
static_assert(std::is_base_of<std::integral_constant<std::size_t, 1>, std::alignment_of<char>>::value, "");
77+
static_assert(std::is_base_of<std::integral_constant<std::size_t, 0>, std::rank<char>>::value, "");
78+
static_assert(std::is_base_of<std::integral_constant<std::size_t, 0>, std::extent<char>>::value, "");
79+
static_assert(std::is_base_of<std::true_type, std::is_same<int, int>>::value, "");
80+
static_assert(std::is_base_of<std::false_type, std::is_base_of<int, int>>::value, "");
81+
static_assert(std::is_base_of<std::true_type, std::is_convertible<int, int>>::value, "");
82+
#if TEST_STD_VER <= 17
83+
static_assert(std::is_base_of<std::true_type, std::is_literal_type<int>>::value, "");
84+
#endif
85+
#if TEST_STD_VER >= 14
86+
static_assert(std::is_base_of<std::false_type, std::is_null_pointer<int>>::value, "");
87+
static_assert(std::is_base_of<std::false_type, std::is_final<int>>::value, "");
88+
#endif
89+
#if TEST_STD_VER >= 17
90+
static_assert(std::is_base_of<std::true_type, std::has_unique_object_representations<int>>::value, "");
91+
static_assert(std::is_base_of<std::false_type, std::is_aggregate<int>>::value, "");
92+
static_assert(std::is_base_of<std::false_type, std::is_swappable_with<int, int>>::value, "");
93+
static_assert(std::is_base_of<std::true_type, std::is_swappable<int>>::value, "");
94+
static_assert(std::is_base_of<std::false_type, std::is_nothrow_swappable_with<int, int>>::value, "");
95+
static_assert(std::is_base_of<std::true_type, std::is_nothrow_swappable<int>>::value, "");
96+
static_assert(std::is_base_of<std::false_type, std::is_invocable<int>>::value, "");
97+
static_assert(std::is_base_of<std::false_type, std::is_invocable_r<int, int>>::value, "");
98+
static_assert(std::is_base_of<std::false_type, std::is_nothrow_invocable<int, int>>::value, "");
99+
static_assert(std::is_base_of<std::false_type, std::is_nothrow_invocable_r<int, int>>::value, "");
100+
#endif
101+
#if TEST_STD_VER >= 20
102+
static_assert(std::is_base_of<std::false_type, std::is_bounded_array<int>>::value, "");
103+
static_assert(std::is_base_of<std::false_type, std::is_unbounded_array<int>>::value, "");
104+
static_assert(std::is_base_of<std::true_type, std::is_nothrow_convertible<int, int>>::value, "");
105+
#endif
106+
#if TEST_STD_VER >= 23
107+
# if defined(__cpp_lib_is_implicit_lifetime) && __cpp_lib_is_implicit_lifetime >= 202302L
108+
static_assert(std::is_base_of<std::true_type, std::is_implicit_lifetime<int>>::value, "");
109+
# endif
110+
static_assert(std::is_base_of<std::false_type, std::is_scoped_enum<int>>::value, "");
111+
#endif
112+
#if TEST_STD_VER >= 26
113+
# if defined(__cpp_lib_is_virtual_base_of) && __cpp_lib_is_virtual_base_of >= 202406L
114+
static_assert(std::is_base_of<std::false_type, std::is_virtual_base_of<int, int>>::value, "");
115+
# endif
116+
#endif

0 commit comments

Comments
 (0)