| 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 8b39d49c9708e77a9dad5946bd0bbc95d4a49fa2..20b67b650b5fb0906d391ea821ec6cd549b0f982 100644
|
| --- a/third_party/WebKit/Source/wtf/TypeTraits.h
|
| +++ b/third_party/WebKit/Source/wtf/TypeTraits.h
|
| @@ -46,13 +46,15 @@ enum WeakHandlingFlag {
|
| WeakHandlingInCollections
|
| };
|
|
|
| -// Compilers behave differently on __has_trivial_assign(T) if T has a user-deleted copy assignment operator:
|
| +// 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.
|
| +// 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)
|
| @@ -100,19 +102,23 @@ struct IsTriviallyCopyAssignable {
|
|
|
| template <typename T>
|
| struct IsTriviallyMoveAssignable {
|
| - // TODO(yutak): This isn't really correct, because __has_trivial_assign appears to look only at copy assignment.
|
| - // However, std::is_trivially_move_assignable isn't available at this moment, and there isn't a good way to
|
| - // write that ourselves.
|
| + // TODO(yutak): This isn't really correct, because __has_trivial_assign
|
| + // appears to look only at copy assignment. However,
|
| + // std::is_trivially_move_assignable isn't available at this moment, and
|
| + // there isn't a good way to write that ourselves.
|
| //
|
| - // Here we use IsTriviallyCopyAssignable as a conservative approximation: if T is trivially copy assignable,
|
| - // T is trivially move assignable, too. This definition misses a case where T is trivially move-only assignable,
|
| - // but such cases should be rare.
|
| + // Here we use IsTriviallyCopyAssignable as a conservative approximation: if T
|
| + // is trivially copy assignable, T is trivially move assignable, too. This
|
| + // definition misses a case where T is trivially move-only assignable, but
|
| + // such cases should be rare.
|
| 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.
|
| +// 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 {
|
|
|