| Index: Source/wtf/TypeTraits.cpp
|
| diff --git a/Source/wtf/TypeTraits.cpp b/Source/wtf/TypeTraits.cpp
|
| index a5761c49bc475991bee066b50103e58f0886fe79..e70250e2441cb24c899bf642648bc8559e2f2759 100644
|
| --- a/Source/wtf/TypeTraits.cpp
|
| +++ b/Source/wtf/TypeTraits.cpp
|
| @@ -52,6 +52,23 @@ COMPILE_ASSERT(IsFloatingPoint<double>::value, WTF_IsFloatingPoint_double_true);
|
| COMPILE_ASSERT(IsFloatingPoint<long double>::value, WTF_IsFloatingPoint_long_double_true);
|
| COMPILE_ASSERT(!IsFloatingPoint<int>::value, WTF_IsFloatingPoint_int_false);
|
|
|
| +COMPILE_ASSERT(IsPointer<void*>::value, WTF_IsPointer_void_star_true);
|
| +COMPILE_ASSERT(IsPointer<char*>::value, WTF_IsPointer_char_star_true);
|
| +COMPILE_ASSERT(IsPointer<const char*>::value, WTF_IsPointer_const_char_star_true);
|
| +COMPILE_ASSERT(!IsPointer<char>::value, WTF_IsPointer_char_false);
|
| +COMPILE_ASSERT(!IsPointer<int>::value, WTF_IsPointer_int_false);
|
| +COMPILE_ASSERT(!IsPointer<long>::value, WTF_IsPointer_long_false);
|
| +
|
| +enum TestEnum { TestEnumValue };
|
| +COMPILE_ASSERT(IsEnum<TestEnum>::value, WTF_IsEnum_enum_true);
|
| +COMPILE_ASSERT(!IsEnum<int>::value, WTF_IsEnum_int_false);
|
| +COMPILE_ASSERT(!IsEnum<TestEnum*>::value, WTF_IsEnum_enum_star_false);
|
| +
|
| +COMPILE_ASSERT(IsScalar<TestEnum>::value, WTF_IsScalar_enum_true);
|
| +COMPILE_ASSERT(IsScalar<int>::value, WTF_IsScalar_int_true);
|
| +COMPILE_ASSERT(IsScalar<TestEnum*>::value, WTF_IsScalar_enum_star_true);
|
| +COMPILE_ASSERT(IsScalar<double>::value, WTF_IsScalar_double_true);
|
| +
|
| COMPILE_ASSERT(IsPod<bool>::value, WTF_IsPod_bool_true);
|
| COMPILE_ASSERT(IsPod<char>::value, WTF_IsPod_char_true);
|
| COMPILE_ASSERT(IsPod<signed char>::value, WTF_IsPod_signed_char_true);
|
| @@ -73,7 +90,73 @@ COMPILE_ASSERT(IsPod<volatile char*>::value, WTF_IsPod_volatile_char_pointer_tru
|
| COMPILE_ASSERT(IsPod<double>::value, WTF_IsPod_double_true);
|
| COMPILE_ASSERT(IsPod<long double>::value, WTF_IsPod_long_double_true);
|
| COMPILE_ASSERT(IsPod<float>::value, WTF_IsPod_float_true);
|
| -COMPILE_ASSERT(!IsPod<IsPod<bool> >::value, WTF_IsPod_struct_false);
|
| +struct VirtualClass {
|
| + virtual void A() { }
|
| +};
|
| +COMPILE_ASSERT(!IsTriviallyMoveAssignable<VirtualClass>::value, WTF_IsTriviallyMoveAssignable_VirtualClass_false);
|
| +COMPILE_ASSERT(!IsScalar<VirtualClass>::value, WTF_IsScalar_class_false);
|
| +COMPILE_ASSERT(IsScalar<VirtualClass*>::value, WTF_IsScalar_class_ptr_true);
|
| +
|
| +struct DestructorClass {
|
| + ~DestructorClass() { }
|
| +};
|
| +COMPILE_ASSERT(IsTriviallyMoveAssignable<DestructorClass>::value, WTF_IsTriviallyMoveAssignable_DestructorClass_true);
|
| +COMPILE_ASSERT(IsTriviallyCopyAssignable<DestructorClass>::value, WTF_IsTriviallyCopyAssignable_DestructorClass_true);
|
| +COMPILE_ASSERT(IsTriviallyDefaultConstructible<DestructorClass>::value, WTF_IsTriviallyDefaultConstructable_DestructorClass_true);
|
| +
|
| +struct MixedPrivate {
|
| + int M2() { return m2; }
|
| + int m1;
|
| +private:
|
| + int m2;
|
| +};
|
| +COMPILE_ASSERT(IsTriviallyMoveAssignable<MixedPrivate>::value, WTF_IsTriviallyMoveAssignable_MixedPrivate_true);
|
| +COMPILE_ASSERT(IsTriviallyCopyAssignable<MixedPrivate>::value, WTF_IsTriviallyCopyAssignable_MixedPrivate_true);
|
| +COMPILE_ASSERT(IsTriviallyDefaultConstructible<MixedPrivate>::value, WTF_IsTriviallyDefaultConstructable_MixedPrivate_true);
|
| +struct JustPrivate {
|
| + int M2() { return m2; }
|
| +private:
|
| + int m2;
|
| +};
|
| +COMPILE_ASSERT(IsTriviallyMoveAssignable<JustPrivate>::value, WTF_IsTriviallyMoveAssignable_JustPrivate_true);
|
| +COMPILE_ASSERT(IsTriviallyCopyAssignable<JustPrivate>::value, WTF_IsTriviallyCopyAssignable_JustPrivate_true);
|
| +COMPILE_ASSERT(IsTriviallyDefaultConstructible<JustPrivate>::value, WTF_IsTriviallyDefaultConstructable_JustPrivate_true);
|
| +struct JustPublic {
|
| + int m2;
|
| +};
|
| +COMPILE_ASSERT(IsTriviallyMoveAssignable<JustPublic>::value, WTF_IsTriviallyMoveAssignable_JustPublic_true);
|
| +COMPILE_ASSERT(IsTriviallyCopyAssignable<JustPublic>::value, WTF_IsTriviallyCopyAssignable_JustPublic_true);
|
| +COMPILE_ASSERT(IsTriviallyDefaultConstructible<JustPublic>::value, WTF_IsTriviallyDefaultConstructable_JustPublic_true);
|
| +struct NestedInherited : public JustPublic, JustPrivate {
|
| + float m3;
|
| +};
|
| +COMPILE_ASSERT(IsTriviallyMoveAssignable<NestedInherited>::value, WTF_IsTriviallyMoveAssignable_NestedInherited_true);
|
| +COMPILE_ASSERT(IsTriviallyCopyAssignable<NestedInherited>::value, WTF_IsTriviallyCopyAssignable_NestedInherited_true);
|
| +COMPILE_ASSERT(IsTriviallyDefaultConstructible<NestedInherited>::value, WTF_IsTriviallyDefaultConstructable_NestedInherited_true);
|
| +struct NestedOwned {
|
| + JustPublic m1;
|
| + JustPrivate m2;
|
| + float m3;
|
| +};
|
| +
|
| +COMPILE_ASSERT(IsTriviallyMoveAssignable<NestedOwned>::value, WTF_IsTriviallyMoveAssignable_NestedOwned_true);
|
| +COMPILE_ASSERT(IsTriviallyCopyAssignable<NestedOwned>::value, WTF_IsTriviallyCopyAssignable_NestedOwned_true);
|
| +COMPILE_ASSERT(IsTriviallyDefaultConstructible<NestedOwned>::value, WTF_IsTriviallyDefaultConstructable_NestedOwned_true);
|
| +
|
| +class NonCopyableClass {
|
| +#if COMPILER_SUPPORTS(CXX_DELETED_FUNCTIONS)
|
| + NonCopyableClass(const NonCopyableClass&) = delete;
|
| + NonCopyableClass& operator=(const NonCopyableClass&) = delete;
|
| +#else
|
| + NonCopyableClass(const NonCopyableClass&);
|
| + NonCopyableClass& operator=(const NonCopyableClass&);
|
| +#endif // COMPILER_SUPPORTS(CXX_DELETED_FUNCTIONS)
|
| +};
|
| +#if 0 // Compilers don't get this "right" yet if using = delete.
|
| +COMPILE_ASSERT(!IsTriviallyMoveAssignable<NonCopyableClass>::value, WTF_IsTriviallyMoveAssignable_NonCopyableClass_false);
|
| +COMPILE_ASSERT(!IsTriviallyCopyAssignable<NonCopyableClass>::value, WTF_IsTriviallyCopyAssignable_NonCopyableClass_false);
|
| +COMPILE_ASSERT(IsTriviallyDefaultConstructible<NonCopyableClass>::value, WTF_IsTriviallyDefaultConstructable_NonCopyableClass_true);
|
| +#endif // 0
|
|
|
| enum IsConvertibleToIntegerCheck { };
|
| COMPILE_ASSERT(IsConvertibleToInteger<IsConvertibleToIntegerCheck>::value, WTF_IsConvertibleToInteger_enum_true);
|
|
|