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 |
55 COMPILE_ASSERT(IsPod<bool>::value, WTF_IsPod_bool_true); | 72 COMPILE_ASSERT(IsPod<bool>::value, WTF_IsPod_bool_true); |
56 COMPILE_ASSERT(IsPod<char>::value, WTF_IsPod_char_true); | 73 COMPILE_ASSERT(IsPod<char>::value, WTF_IsPod_char_true); |
57 COMPILE_ASSERT(IsPod<signed char>::value, WTF_IsPod_signed_char_true); | 74 COMPILE_ASSERT(IsPod<signed char>::value, WTF_IsPod_signed_char_true); |
58 COMPILE_ASSERT(IsPod<unsigned char>::value, WTF_IsPod_unsigned_char_true); | 75 COMPILE_ASSERT(IsPod<unsigned char>::value, WTF_IsPod_unsigned_char_true); |
59 COMPILE_ASSERT(IsPod<short>::value, WTF_IsPod_short_true); | 76 COMPILE_ASSERT(IsPod<short>::value, WTF_IsPod_short_true); |
60 COMPILE_ASSERT(IsPod<unsigned short>::value, WTF_IsPod_unsigned_short_true); | 77 COMPILE_ASSERT(IsPod<unsigned short>::value, WTF_IsPod_unsigned_short_true); |
61 COMPILE_ASSERT(IsPod<int>::value, WTF_IsPod_int_true); | 78 COMPILE_ASSERT(IsPod<int>::value, WTF_IsPod_int_true); |
62 COMPILE_ASSERT(IsPod<unsigned>::value, WTF_IsPod_unsigned_int_true); | 79 COMPILE_ASSERT(IsPod<unsigned>::value, WTF_IsPod_unsigned_int_true); |
63 COMPILE_ASSERT(IsPod<long>::value, WTF_IsPod_long_true); | 80 COMPILE_ASSERT(IsPod<long>::value, WTF_IsPod_long_true); |
64 COMPILE_ASSERT(IsPod<unsigned long>::value, WTF_IsPod_unsigned_long_true); | 81 COMPILE_ASSERT(IsPod<unsigned long>::value, WTF_IsPod_unsigned_long_true); |
65 COMPILE_ASSERT(IsPod<long long>::value, WTF_IsPod_long_long_true); | 82 COMPILE_ASSERT(IsPod<long long>::value, WTF_IsPod_long_long_true); |
66 COMPILE_ASSERT(IsPod<unsigned long long>::value, WTF_IsPod_unsigned_long_long_tr
ue); | 83 COMPILE_ASSERT(IsPod<unsigned long long>::value, WTF_IsPod_unsigned_long_long_tr
ue); |
67 #if !COMPILER(MSVC) || defined(_NATIVE_WCHAR_T_DEFINED) | 84 #if !COMPILER(MSVC) || defined(_NATIVE_WCHAR_T_DEFINED) |
68 COMPILE_ASSERT(IsPod<wchar_t>::value, WTF_IsPod_wchar_t_true); | 85 COMPILE_ASSERT(IsPod<wchar_t>::value, WTF_IsPod_wchar_t_true); |
69 #endif | 86 #endif |
70 COMPILE_ASSERT(IsPod<char*>::value, WTF_IsPod_char_pointer_true); | 87 COMPILE_ASSERT(IsPod<char*>::value, WTF_IsPod_char_pointer_true); |
71 COMPILE_ASSERT(IsPod<const char*>::value, WTF_IsPod_const_char_pointer_true); | 88 COMPILE_ASSERT(IsPod<const char*>::value, WTF_IsPod_const_char_pointer_true); |
72 COMPILE_ASSERT(IsPod<volatile char*>::value, WTF_IsPod_volatile_char_pointer_tru
e); | 89 COMPILE_ASSERT(IsPod<volatile char*>::value, WTF_IsPod_volatile_char_pointer_tru
e); |
73 COMPILE_ASSERT(IsPod<double>::value, WTF_IsPod_double_true); | 90 COMPILE_ASSERT(IsPod<double>::value, WTF_IsPod_double_true); |
74 COMPILE_ASSERT(IsPod<long double>::value, WTF_IsPod_long_double_true); | 91 COMPILE_ASSERT(IsPod<long double>::value, WTF_IsPod_long_double_true); |
75 COMPILE_ASSERT(IsPod<float>::value, WTF_IsPod_float_true); | 92 COMPILE_ASSERT(IsPod<float>::value, WTF_IsPod_float_true); |
76 COMPILE_ASSERT(!IsPod<IsPod<bool> >::value, WTF_IsPod_struct_false); | 93 struct VirtualClass { |
| 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 |
77 | 160 |
78 enum IsConvertibleToIntegerCheck { }; | 161 enum IsConvertibleToIntegerCheck { }; |
79 COMPILE_ASSERT(IsConvertibleToInteger<IsConvertibleToIntegerCheck>::value, WTF_I
sConvertibleToInteger_enum_true); | 162 COMPILE_ASSERT(IsConvertibleToInteger<IsConvertibleToIntegerCheck>::value, WTF_I
sConvertibleToInteger_enum_true); |
80 COMPILE_ASSERT(IsConvertibleToInteger<bool>::value, WTF_IsConvertibleToInteger_b
ool_true); | 163 COMPILE_ASSERT(IsConvertibleToInteger<bool>::value, WTF_IsConvertibleToInteger_b
ool_true); |
81 COMPILE_ASSERT(IsConvertibleToInteger<char>::value, WTF_IsConvertibleToInteger_c
har_true); | 164 COMPILE_ASSERT(IsConvertibleToInteger<char>::value, WTF_IsConvertibleToInteger_c
har_true); |
82 COMPILE_ASSERT(IsConvertibleToInteger<signed char>::value, WTF_IsConvertibleToIn
teger_signed_char_true); | 165 COMPILE_ASSERT(IsConvertibleToInteger<signed char>::value, WTF_IsConvertibleToIn
teger_signed_char_true); |
83 COMPILE_ASSERT(IsConvertibleToInteger<unsigned char>::value, WTF_IsConvertibleTo
Integer_unsigned_char_true); | 166 COMPILE_ASSERT(IsConvertibleToInteger<unsigned char>::value, WTF_IsConvertibleTo
Integer_unsigned_char_true); |
84 COMPILE_ASSERT(IsConvertibleToInteger<short>::value, WTF_IsConvertibleToInteger_
short_true); | 167 COMPILE_ASSERT(IsConvertibleToInteger<short>::value, WTF_IsConvertibleToInteger_
short_true); |
85 COMPILE_ASSERT(IsConvertibleToInteger<unsigned short>::value, WTF_IsConvertibleT
oInteger_unsigned_short_true); | 168 COMPILE_ASSERT(IsConvertibleToInteger<unsigned short>::value, WTF_IsConvertibleT
oInteger_unsigned_short_true); |
86 COMPILE_ASSERT(IsConvertibleToInteger<int>::value, WTF_IsConvertibleToInteger_in
t_true); | 169 COMPILE_ASSERT(IsConvertibleToInteger<int>::value, WTF_IsConvertibleToInteger_in
t_true); |
(...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
150 typedef int IntArray[]; | 233 typedef int IntArray[]; |
151 typedef int IntArraySized[4]; | 234 typedef int IntArraySized[4]; |
152 | 235 |
153 COMPILE_ASSERT((IsArray<IntArray>::value), WTF_Test_IsArray_int_array); | 236 COMPILE_ASSERT((IsArray<IntArray>::value), WTF_Test_IsArray_int_array); |
154 COMPILE_ASSERT((IsArray<IntArraySized>::value), WTF_Test_IsArray_int_sized_array
); | 237 COMPILE_ASSERT((IsArray<IntArraySized>::value), WTF_Test_IsArray_int_sized_array
); |
155 | 238 |
156 COMPILE_ASSERT((IsSameType<int, RemoveExtent<IntArray>::Type>::value), WTF_Test_
RemoveExtent_int_array); | 239 COMPILE_ASSERT((IsSameType<int, RemoveExtent<IntArray>::Type>::value), WTF_Test_
RemoveExtent_int_array); |
157 COMPILE_ASSERT((IsSameType<int, RemoveExtent<IntArraySized>::Type>::value), WTF_
Test_RemoveReference_int_sized_array); | 240 COMPILE_ASSERT((IsSameType<int, RemoveExtent<IntArraySized>::Type>::value), WTF_
Test_RemoveReference_int_sized_array); |
158 | 241 |
159 } // namespace WTF | 242 } // namespace WTF |
OLD | NEW |