| Index: base/template_util.h
|
| diff --git a/base/template_util.h b/base/template_util.h
|
| index 42552107cfbc148758c4d2e5ed5caa0078f25507..10154dbbeb9ce6e6cc5cc0d07634e217760e7237 100644
|
| --- a/base/template_util.h
|
| +++ b/base/template_util.h
|
| @@ -51,46 +51,8 @@ template <class T> struct is_non_const_reference : std::false_type {};
|
| template <class T> struct is_non_const_reference<T&> : std::true_type {};
|
| template <class T> struct is_non_const_reference<const T&> : std::false_type {};
|
|
|
| -// is_assignable
|
| -
|
| namespace internal {
|
|
|
| -template <typename First, typename Second>
|
| -struct SelectSecond {
|
| - using type = Second;
|
| -};
|
| -
|
| -struct Any {
|
| - Any(...);
|
| -};
|
| -
|
| -// True case: If |Lvalue| can be assigned to from |Rvalue|, then the return
|
| -// value is a true_type.
|
| -template <class Lvalue, class Rvalue>
|
| -typename internal::SelectSecond<
|
| - decltype((std::declval<Lvalue>() = std::declval<Rvalue>())),
|
| - std::true_type>::type
|
| -IsAssignableTest(Lvalue&&, Rvalue&&);
|
| -
|
| -// False case: Otherwise the return value is a false_type.
|
| -template <class Rvalue>
|
| -std::false_type IsAssignableTest(internal::Any, Rvalue&&);
|
| -
|
| -// Default case: Neither Lvalue nor Rvalue is void. Uses IsAssignableTest to
|
| -// determine the type of IsAssignableImpl.
|
| -template <class Lvalue,
|
| - class Rvalue,
|
| - bool = std::is_void<Lvalue>::value || std::is_void<Rvalue>::value>
|
| -struct IsAssignableImpl
|
| - : public std::common_type<decltype(
|
| - internal::IsAssignableTest(std::declval<Lvalue>(),
|
| - std::declval<Rvalue>()))>::type {};
|
| -
|
| -// Void case: Either Lvalue or Rvalue is void. Then the type of IsAssignableTest
|
| -// is false_type.
|
| -template <class Lvalue, class Rvalue>
|
| -struct IsAssignableImpl<Lvalue, Rvalue, true> : public std::false_type {};
|
| -
|
| // Uses expression SFINAE to detect whether using operator<< would work.
|
| template <typename T, typename = void>
|
| struct SupportsOstreamOperator : std::false_type {};
|
| @@ -102,29 +64,6 @@ struct SupportsOstreamOperator<T,
|
|
|
| } // namespace internal
|
|
|
| -// TODO(crbug.com/554293): Remove this when all platforms have this in the std
|
| -// namespace.
|
| -template <class Lvalue, class Rvalue>
|
| -struct is_assignable : public internal::IsAssignableImpl<Lvalue, Rvalue> {};
|
| -
|
| -// is_copy_assignable is true if a T const& is assignable to a T&.
|
| -// TODO(crbug.com/554293): Remove this when all platforms have this in the std
|
| -// namespace.
|
| -template <class T>
|
| -struct is_copy_assignable
|
| - : public is_assignable<typename std::add_lvalue_reference<T>::type,
|
| - typename std::add_lvalue_reference<
|
| - typename std::add_const<T>::type>::type> {};
|
| -
|
| -// is_move_assignable is true if a T&& is assignable to a T&.
|
| -// TODO(crbug.com/554293): Remove this when all platforms have this in the std
|
| -// namespace.
|
| -template <class T>
|
| -struct is_move_assignable
|
| - : public is_assignable<typename std::add_lvalue_reference<T>::type,
|
| - const typename std::add_rvalue_reference<T>::type> {
|
| -};
|
| -
|
| // underlying_type produces the integer type backing an enum type.
|
| // TODO(crbug.com/554293): Remove this when all platforms have this in the std
|
| // namespace.
|
|
|