diff options
Diffstat (limited to 'base/template_util.h')
-rw-r--r-- | base/template_util.h | 61 |
1 files changed, 0 insertions, 61 deletions
diff --git a/base/template_util.h b/base/template_util.h index 42552107cf..10154dbbeb 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. |