From 083d04dd4a62ebbf037079b06e49b323c5e1192a Mon Sep 17 00:00:00 2001 From: Abseil Team Date: Tue, 7 Aug 2018 11:43:34 -0700 Subject: Export of internal Abseil changes. -- c1f3a243ff3713917eaf0255c86ddd1b40461ba9 by Abseil Team : Remove stray space. PiperOrigin-RevId: 207753171 -- 4abe43b174f7fafa390d2f6eb96f31977a38fc69 by Shaindel Schwartz : Typo fix. PiperOrigin-RevId: 207572868 -- e7757b409256b025cadba20a84a93cb9dc4319e1 by Abseil Team : Adds backported is_(copy|move)_assignable PiperOrigin-RevId: 207572180 GitOrigin-RevId: c1f3a243ff3713917eaf0255c86ddd1b40461ba9 Change-Id: I1202715e5092b54d5967017728044715d6eb2ec0 --- absl/meta/type_traits.h | 23 ++++++++++++++++++++--- 1 file changed, 20 insertions(+), 3 deletions(-) (limited to 'absl/meta/type_traits.h') diff --git a/absl/meta/type_traits.h b/absl/meta/type_traits.h index 457b890..23ebd6e 100644 --- a/absl/meta/type_traits.h +++ b/absl/meta/type_traits.h @@ -105,8 +105,25 @@ template class Op, class... Args> struct is_detected_convertible : is_detected_convertible_impl::type {}; +template +using IsCopyAssignableImpl = + decltype(std::declval() = std::declval()); + +template +using IsMoveAssignableImpl = decltype(std::declval() = std::declval()); + } // namespace type_traits_internal +template +struct is_copy_assignable : type_traits_internal::is_detected< + type_traits_internal::IsCopyAssignableImpl, T> { +}; + +template +struct is_move_assignable : type_traits_internal::is_detected< + type_traits_internal::IsMoveAssignableImpl, T> { +}; + // void_t() // // Ignores the type of any its arguments and returns `void`. In general, this @@ -309,7 +326,7 @@ template struct is_trivially_copy_assignable : std::integral_constant< bool, __has_trivial_assign(typename std::remove_reference::type) && - std::is_copy_assignable::value> { + absl::is_copy_assignable::value> { #ifdef ABSL_HAVE_STD_IS_TRIVIALLY_ASSIGNABLE private: static constexpr bool compliant = @@ -409,11 +426,11 @@ struct IsHashEnabled : absl::conjunction>, std::is_copy_constructible>, std::is_destructible>, - std::is_copy_assignable>, + absl::is_copy_assignable>, IsHashable> {}; + } // namespace type_traits_internal } // namespace absl - #endif // ABSL_META_TYPE_TRAITS_H_ -- cgit v1.2.3