| Index: third_party/WebKit/Source/wtf/TypeTraits.h
|
| diff --git a/third_party/WebKit/Source/wtf/TypeTraits.h b/third_party/WebKit/Source/wtf/TypeTraits.h
|
| index 20b67b650b5fb0906d391ea821ec6cd549b0f982..987d3d36f005aafd5e77ca839c01bcfa198f3619 100644
|
| --- a/third_party/WebKit/Source/wtf/TypeTraits.h
|
| +++ b/third_party/WebKit/Source/wtf/TypeTraits.h
|
| @@ -46,18 +46,6 @@ enum WeakHandlingFlag {
|
| WeakHandlingInCollections
|
| };
|
|
|
| -// Compilers behave differently on __has_trivial_assign(T) if T has a
|
| -// user-deleted copy assignment operator:
|
| -//
|
| -// * MSVC returns false; but
|
| -// * The others return true.
|
| -//
|
| -// To workaround that, here we have IsAssignable<T, From> class template, but
|
| -// unfortunately, MSVC 2013 cannot compile it due to the lack of expression
|
| -// SFINAE.
|
| -//
|
| -// Thus, IsAssignable is only defined on non-MSVC compilers.
|
| -#if !COMPILER(MSVC) || COMPILER(CLANG)
|
| template <typename T, typename From>
|
| class IsAssignable {
|
| typedef char YesType;
|
| @@ -88,16 +76,11 @@ struct IsMoveAssignable {
|
| static_assert(!std::is_reference<T>::value, "T must not be a reference.");
|
| static const bool value = IsAssignable<T, T&&>::value;
|
| };
|
| -#endif // !COMPILER(MSVC) || COMPILER(CLANG)
|
|
|
| template <typename T>
|
| struct IsTriviallyCopyAssignable {
|
| -#if COMPILER(MSVC) && !COMPILER(CLANG)
|
| - static const bool value = __has_trivial_assign(T);
|
| -#else
|
| static const bool value =
|
| __has_trivial_assign(T) && IsCopyAssignable<T>::value;
|
| -#endif
|
| };
|
|
|
| template <typename T>
|
| @@ -114,12 +97,6 @@ struct IsTriviallyMoveAssignable {
|
| static const bool value = IsTriviallyCopyAssignable<T>::value;
|
| };
|
|
|
| -// Same as above, but for __has_trivial_constructor and
|
| -// __has_trivial_destructor. For IsTriviallyDefaultConstructible, we don't have
|
| -// to write IsDefaultConstructible ourselves since we can use
|
| -// std::is_constructible<T>. For IsTriviallyDestructible, though, we can't rely
|
| -// on std::is_destructible<T> right now.
|
| -#if !COMPILER(MSVC) || COMPILER(CLANG)
|
| template <typename T>
|
| class IsDestructible {
|
| typedef char YesType;
|
| @@ -136,26 +113,17 @@ class IsDestructible {
|
| static const bool value =
|
| sizeof(checkDestructibility<T>(0)) == sizeof(YesType);
|
| };
|
| -#endif
|
|
|
| template <typename T>
|
| struct IsTriviallyDefaultConstructible {
|
| -#if COMPILER(MSVC) && !COMPILER(CLANG)
|
| - static const bool value = __has_trivial_constructor(T);
|
| -#else
|
| static const bool value =
|
| __has_trivial_constructor(T) && std::is_constructible<T>::value;
|
| -#endif
|
| };
|
|
|
| template <typename T>
|
| struct IsTriviallyDestructible {
|
| -#if COMPILER(MSVC) && !COMPILER(CLANG)
|
| - static const bool value = __has_trivial_destructor(T);
|
| -#else
|
| static const bool value =
|
| __has_trivial_destructor(T) && IsDestructible<T>::value;
|
| -#endif
|
| };
|
|
|
| template <typename T, typename U>
|
|
|