OLD | NEW |
1 /* | 1 /* |
2 * Copyright (C) 2006, 2007, 2008 Apple Inc. All rights reserved. | 2 * Copyright (C) 2006, 2007, 2008 Apple Inc. All rights reserved. |
3 * Copyright (C) 2009, 2010 Google Inc. All rights reserved. | 3 * Copyright (C) 2009, 2010 Google Inc. All rights reserved. |
4 * | 4 * |
5 * This library is free software; you can redistribute it and/or | 5 * This library is free software; you can redistribute it and/or |
6 * modify it under the terms of the GNU Library General Public | 6 * modify it under the terms of the GNU Library General Public |
7 * License as published by the Free Software Foundation; either | 7 * License as published by the Free Software Foundation; either |
8 * version 2 of the License, or (at your option) any later version. | 8 * version 2 of the License, or (at your option) any later version. |
9 * | 9 * |
10 * This library is distributed in the hope that it will be useful, | 10 * This library is distributed in the hope that it will be useful, |
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
45 COMPILE_ASSERT(!IsInteger<const char*>::value, WTF_IsInteger_const_char_pointer_
false); | 45 COMPILE_ASSERT(!IsInteger<const char*>::value, WTF_IsInteger_const_char_pointer_
false); |
46 COMPILE_ASSERT(!IsInteger<volatile char*>::value, WTF_IsInteger_volatile_char_po
inter_false); | 46 COMPILE_ASSERT(!IsInteger<volatile char*>::value, WTF_IsInteger_volatile_char_po
inter_false); |
47 COMPILE_ASSERT(!IsInteger<double>::value, WTF_IsInteger_double_false); | 47 COMPILE_ASSERT(!IsInteger<double>::value, WTF_IsInteger_double_false); |
48 COMPILE_ASSERT(!IsInteger<float>::value, WTF_IsInteger_float_false); | 48 COMPILE_ASSERT(!IsInteger<float>::value, WTF_IsInteger_float_false); |
49 | 49 |
50 COMPILE_ASSERT(IsFloatingPoint<float>::value, WTF_IsFloatingPoint_float_true); | 50 COMPILE_ASSERT(IsFloatingPoint<float>::value, WTF_IsFloatingPoint_float_true); |
51 COMPILE_ASSERT(IsFloatingPoint<double>::value, WTF_IsFloatingPoint_double_true); | 51 COMPILE_ASSERT(IsFloatingPoint<double>::value, WTF_IsFloatingPoint_double_true); |
52 COMPILE_ASSERT(IsFloatingPoint<long double>::value, WTF_IsFloatingPoint_long_dou
ble_true); | 52 COMPILE_ASSERT(IsFloatingPoint<long double>::value, WTF_IsFloatingPoint_long_dou
ble_true); |
53 COMPILE_ASSERT(!IsFloatingPoint<int>::value, WTF_IsFloatingPoint_int_false); | 53 COMPILE_ASSERT(!IsFloatingPoint<int>::value, WTF_IsFloatingPoint_int_false); |
54 | 54 |
55 COMPILE_ASSERT(IsPointer<void*>::value, WTF_IsPointer_void_star_true); | |
56 COMPILE_ASSERT(IsPointer<char*>::value, WTF_IsPointer_char_star_true); | |
57 COMPILE_ASSERT(IsPointer<const char*>::value, WTF_IsPointer_const_char_star_true
); | |
58 COMPILE_ASSERT(!IsPointer<char>::value, WTF_IsPointer_char_false); | |
59 COMPILE_ASSERT(!IsPointer<int>::value, WTF_IsPointer_int_false); | |
60 COMPILE_ASSERT(!IsPointer<long>::value, WTF_IsPointer_long_false); | |
61 | |
62 enum TestEnum { TestEnumValue }; | |
63 COMPILE_ASSERT(IsEnum<TestEnum>::value, WTF_IsEnum_enum_true); | |
64 COMPILE_ASSERT(!IsEnum<int>::value, WTF_IsEnum_int_false); | |
65 COMPILE_ASSERT(!IsEnum<TestEnum*>::value, WTF_IsEnum_enum_star_false); | |
66 | |
67 COMPILE_ASSERT(IsScalar<TestEnum>::value, WTF_IsScalar_enum_true); | |
68 COMPILE_ASSERT(IsScalar<int>::value, WTF_IsScalar_int_true); | |
69 COMPILE_ASSERT(IsScalar<TestEnum*>::value, WTF_IsScalar_enum_star_true); | |
70 COMPILE_ASSERT(IsScalar<double>::value, WTF_IsScalar_double_true); | |
71 | |
72 COMPILE_ASSERT(IsPod<bool>::value, WTF_IsPod_bool_true); | 55 COMPILE_ASSERT(IsPod<bool>::value, WTF_IsPod_bool_true); |
73 COMPILE_ASSERT(IsPod<char>::value, WTF_IsPod_char_true); | 56 COMPILE_ASSERT(IsPod<char>::value, WTF_IsPod_char_true); |
74 COMPILE_ASSERT(IsPod<signed char>::value, WTF_IsPod_signed_char_true); | 57 COMPILE_ASSERT(IsPod<signed char>::value, WTF_IsPod_signed_char_true); |
75 COMPILE_ASSERT(IsPod<unsigned char>::value, WTF_IsPod_unsigned_char_true); | 58 COMPILE_ASSERT(IsPod<unsigned char>::value, WTF_IsPod_unsigned_char_true); |
76 COMPILE_ASSERT(IsPod<short>::value, WTF_IsPod_short_true); | 59 COMPILE_ASSERT(IsPod<short>::value, WTF_IsPod_short_true); |
77 COMPILE_ASSERT(IsPod<unsigned short>::value, WTF_IsPod_unsigned_short_true); | 60 COMPILE_ASSERT(IsPod<unsigned short>::value, WTF_IsPod_unsigned_short_true); |
78 COMPILE_ASSERT(IsPod<int>::value, WTF_IsPod_int_true); | 61 COMPILE_ASSERT(IsPod<int>::value, WTF_IsPod_int_true); |
79 COMPILE_ASSERT(IsPod<unsigned>::value, WTF_IsPod_unsigned_int_true); | 62 COMPILE_ASSERT(IsPod<unsigned>::value, WTF_IsPod_unsigned_int_true); |
80 COMPILE_ASSERT(IsPod<long>::value, WTF_IsPod_long_true); | 63 COMPILE_ASSERT(IsPod<long>::value, WTF_IsPod_long_true); |
81 COMPILE_ASSERT(IsPod<unsigned long>::value, WTF_IsPod_unsigned_long_true); | 64 COMPILE_ASSERT(IsPod<unsigned long>::value, WTF_IsPod_unsigned_long_true); |
82 COMPILE_ASSERT(IsPod<long long>::value, WTF_IsPod_long_long_true); | 65 COMPILE_ASSERT(IsPod<long long>::value, WTF_IsPod_long_long_true); |
83 COMPILE_ASSERT(IsPod<unsigned long long>::value, WTF_IsPod_unsigned_long_long_tr
ue); | 66 COMPILE_ASSERT(IsPod<unsigned long long>::value, WTF_IsPod_unsigned_long_long_tr
ue); |
84 #if !COMPILER(MSVC) || defined(_NATIVE_WCHAR_T_DEFINED) | 67 #if !COMPILER(MSVC) || defined(_NATIVE_WCHAR_T_DEFINED) |
85 COMPILE_ASSERT(IsPod<wchar_t>::value, WTF_IsPod_wchar_t_true); | 68 COMPILE_ASSERT(IsPod<wchar_t>::value, WTF_IsPod_wchar_t_true); |
86 #endif | 69 #endif |
87 COMPILE_ASSERT(IsPod<char*>::value, WTF_IsPod_char_pointer_true); | 70 COMPILE_ASSERT(IsPod<char*>::value, WTF_IsPod_char_pointer_true); |
88 COMPILE_ASSERT(IsPod<const char*>::value, WTF_IsPod_const_char_pointer_true); | 71 COMPILE_ASSERT(IsPod<const char*>::value, WTF_IsPod_const_char_pointer_true); |
89 COMPILE_ASSERT(IsPod<volatile char*>::value, WTF_IsPod_volatile_char_pointer_tru
e); | 72 COMPILE_ASSERT(IsPod<volatile char*>::value, WTF_IsPod_volatile_char_pointer_tru
e); |
90 COMPILE_ASSERT(IsPod<double>::value, WTF_IsPod_double_true); | 73 COMPILE_ASSERT(IsPod<double>::value, WTF_IsPod_double_true); |
91 COMPILE_ASSERT(IsPod<long double>::value, WTF_IsPod_long_double_true); | 74 COMPILE_ASSERT(IsPod<long double>::value, WTF_IsPod_long_double_true); |
92 COMPILE_ASSERT(IsPod<float>::value, WTF_IsPod_float_true); | 75 COMPILE_ASSERT(IsPod<float>::value, WTF_IsPod_float_true); |
93 struct VirtualClass { | 76 COMPILE_ASSERT(!IsPod<IsPod<bool> >::value, WTF_IsPod_struct_false); |
94 virtual void A() { } | |
95 }; | |
96 COMPILE_ASSERT(!IsTriviallyMoveAssignable<VirtualClass>::value, WTF_IsTriviallyM
oveAssignable_VirtualClass_false); | |
97 COMPILE_ASSERT(!IsScalar<VirtualClass>::value, WTF_IsScalar_class_false); | |
98 COMPILE_ASSERT(IsScalar<VirtualClass*>::value, WTF_IsScalar_class_ptr_true); | |
99 | |
100 struct DestructorClass { | |
101 ~DestructorClass() { } | |
102 }; | |
103 COMPILE_ASSERT(IsTriviallyMoveAssignable<DestructorClass>::value, WTF_IsTriviall
yMoveAssignable_DestructorClass_true); | |
104 COMPILE_ASSERT(IsTriviallyCopyAssignable<DestructorClass>::value, WTF_IsTriviall
yCopyAssignable_DestructorClass_true); | |
105 COMPILE_ASSERT(IsTriviallyDefaultConstructible<DestructorClass>::value, WTF_IsTr
iviallyDefaultConstructable_DestructorClass_true); | |
106 | |
107 struct MixedPrivate { | |
108 int M2() { return m2; } | |
109 int m1; | |
110 private: | |
111 int m2; | |
112 }; | |
113 COMPILE_ASSERT(IsTriviallyMoveAssignable<MixedPrivate>::value, WTF_IsTriviallyMo
veAssignable_MixedPrivate_true); | |
114 COMPILE_ASSERT(IsTriviallyCopyAssignable<MixedPrivate>::value, WTF_IsTriviallyCo
pyAssignable_MixedPrivate_true); | |
115 COMPILE_ASSERT(IsTriviallyDefaultConstructible<MixedPrivate>::value, WTF_IsTrivi
allyDefaultConstructable_MixedPrivate_true); | |
116 struct JustPrivate { | |
117 int M2() { return m2; } | |
118 private: | |
119 int m2; | |
120 }; | |
121 COMPILE_ASSERT(IsTriviallyMoveAssignable<JustPrivate>::value, WTF_IsTriviallyMov
eAssignable_JustPrivate_true); | |
122 COMPILE_ASSERT(IsTriviallyCopyAssignable<JustPrivate>::value, WTF_IsTriviallyCop
yAssignable_JustPrivate_true); | |
123 COMPILE_ASSERT(IsTriviallyDefaultConstructible<JustPrivate>::value, WTF_IsTrivia
llyDefaultConstructable_JustPrivate_true); | |
124 struct JustPublic { | |
125 int m2; | |
126 }; | |
127 COMPILE_ASSERT(IsTriviallyMoveAssignable<JustPublic>::value, WTF_IsTriviallyMove
Assignable_JustPublic_true); | |
128 COMPILE_ASSERT(IsTriviallyCopyAssignable<JustPublic>::value, WTF_IsTriviallyCopy
Assignable_JustPublic_true); | |
129 COMPILE_ASSERT(IsTriviallyDefaultConstructible<JustPublic>::value, WTF_IsTrivial
lyDefaultConstructable_JustPublic_true); | |
130 struct NestedInherited : public JustPublic, JustPrivate { | |
131 float m3; | |
132 }; | |
133 COMPILE_ASSERT(IsTriviallyMoveAssignable<NestedInherited>::value, WTF_IsTriviall
yMoveAssignable_NestedInherited_true); | |
134 COMPILE_ASSERT(IsTriviallyCopyAssignable<NestedInherited>::value, WTF_IsTriviall
yCopyAssignable_NestedInherited_true); | |
135 COMPILE_ASSERT(IsTriviallyDefaultConstructible<NestedInherited>::value, WTF_IsTr
iviallyDefaultConstructable_NestedInherited_true); | |
136 struct NestedOwned { | |
137 JustPublic m1; | |
138 JustPrivate m2; | |
139 float m3; | |
140 }; | |
141 | |
142 COMPILE_ASSERT(IsTriviallyMoveAssignable<NestedOwned>::value, WTF_IsTriviallyMov
eAssignable_NestedOwned_true); | |
143 COMPILE_ASSERT(IsTriviallyCopyAssignable<NestedOwned>::value, WTF_IsTriviallyCop
yAssignable_NestedOwned_true); | |
144 COMPILE_ASSERT(IsTriviallyDefaultConstructible<NestedOwned>::value, WTF_IsTrivia
llyDefaultConstructable_NestedOwned_true); | |
145 | |
146 class NonCopyableClass { | |
147 #if COMPILER_SUPPORTS(CXX_DELETED_FUNCTIONS) | |
148 NonCopyableClass(const NonCopyableClass&) = delete; | |
149 NonCopyableClass& operator=(const NonCopyableClass&) = delete; | |
150 #else | |
151 NonCopyableClass(const NonCopyableClass&); | |
152 NonCopyableClass& operator=(const NonCopyableClass&); | |
153 #endif // COMPILER_SUPPORTS(CXX_DELETED_FUNCTIONS) | |
154 }; | |
155 #if 0 // Compilers don't get this "right" yet if using = delete. | |
156 COMPILE_ASSERT(!IsTriviallyMoveAssignable<NonCopyableClass>::value, WTF_IsTrivia
llyMoveAssignable_NonCopyableClass_false); | |
157 COMPILE_ASSERT(!IsTriviallyCopyAssignable<NonCopyableClass>::value, WTF_IsTrivia
llyCopyAssignable_NonCopyableClass_false); | |
158 COMPILE_ASSERT(IsTriviallyDefaultConstructible<NonCopyableClass>::value, WTF_IsT
riviallyDefaultConstructable_NonCopyableClass_true); | |
159 #endif // 0 | |
160 | 77 |
161 enum IsConvertibleToIntegerCheck { }; | 78 enum IsConvertibleToIntegerCheck { }; |
162 COMPILE_ASSERT(IsConvertibleToInteger<IsConvertibleToIntegerCheck>::value, WTF_I
sConvertibleToInteger_enum_true); | 79 COMPILE_ASSERT(IsConvertibleToInteger<IsConvertibleToIntegerCheck>::value, WTF_I
sConvertibleToInteger_enum_true); |
163 COMPILE_ASSERT(IsConvertibleToInteger<bool>::value, WTF_IsConvertibleToInteger_b
ool_true); | 80 COMPILE_ASSERT(IsConvertibleToInteger<bool>::value, WTF_IsConvertibleToInteger_b
ool_true); |
164 COMPILE_ASSERT(IsConvertibleToInteger<char>::value, WTF_IsConvertibleToInteger_c
har_true); | 81 COMPILE_ASSERT(IsConvertibleToInteger<char>::value, WTF_IsConvertibleToInteger_c
har_true); |
165 COMPILE_ASSERT(IsConvertibleToInteger<signed char>::value, WTF_IsConvertibleToIn
teger_signed_char_true); | 82 COMPILE_ASSERT(IsConvertibleToInteger<signed char>::value, WTF_IsConvertibleToIn
teger_signed_char_true); |
166 COMPILE_ASSERT(IsConvertibleToInteger<unsigned char>::value, WTF_IsConvertibleTo
Integer_unsigned_char_true); | 83 COMPILE_ASSERT(IsConvertibleToInteger<unsigned char>::value, WTF_IsConvertibleTo
Integer_unsigned_char_true); |
167 COMPILE_ASSERT(IsConvertibleToInteger<short>::value, WTF_IsConvertibleToInteger_
short_true); | 84 COMPILE_ASSERT(IsConvertibleToInteger<short>::value, WTF_IsConvertibleToInteger_
short_true); |
168 COMPILE_ASSERT(IsConvertibleToInteger<unsigned short>::value, WTF_IsConvertibleT
oInteger_unsigned_short_true); | 85 COMPILE_ASSERT(IsConvertibleToInteger<unsigned short>::value, WTF_IsConvertibleT
oInteger_unsigned_short_true); |
169 COMPILE_ASSERT(IsConvertibleToInteger<int>::value, WTF_IsConvertibleToInteger_in
t_true); | 86 COMPILE_ASSERT(IsConvertibleToInteger<int>::value, WTF_IsConvertibleToInteger_in
t_true); |
(...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
233 typedef int IntArray[]; | 150 typedef int IntArray[]; |
234 typedef int IntArraySized[4]; | 151 typedef int IntArraySized[4]; |
235 | 152 |
236 COMPILE_ASSERT((IsArray<IntArray>::value), WTF_Test_IsArray_int_array); | 153 COMPILE_ASSERT((IsArray<IntArray>::value), WTF_Test_IsArray_int_array); |
237 COMPILE_ASSERT((IsArray<IntArraySized>::value), WTF_Test_IsArray_int_sized_array
); | 154 COMPILE_ASSERT((IsArray<IntArraySized>::value), WTF_Test_IsArray_int_sized_array
); |
238 | 155 |
239 COMPILE_ASSERT((IsSameType<int, RemoveExtent<IntArray>::Type>::value), WTF_Test_
RemoveExtent_int_array); | 156 COMPILE_ASSERT((IsSameType<int, RemoveExtent<IntArray>::Type>::value), WTF_Test_
RemoveExtent_int_array); |
240 COMPILE_ASSERT((IsSameType<int, RemoveExtent<IntArraySized>::Type>::value), WTF_
Test_RemoveReference_int_sized_array); | 157 COMPILE_ASSERT((IsSameType<int, RemoveExtent<IntArraySized>::Type>::value), WTF_
Test_RemoveReference_int_sized_array); |
241 | 158 |
242 } // namespace WTF | 159 } // namespace WTF |
OLD | NEW |