From 42f22a28401c952f1fc5942231c7fdac80811bf5 Mon Sep 17 00:00:00 2001 From: Abseil Team Date: Wed, 18 Jul 2018 10:04:24 -0700 Subject: Export of internal Abseil changes. -- 28b634d3e8e879546e20006b81086a2b02390f1d by Abseil Team : Indicate Solaris / Illumos has mmap support https://github.com/abseil/abseil-cpp/pull/139 This change is **untested** as Abseil does not officially support Solaris/Illumos. PiperOrigin-RevId: 205094615 -- 3c4cc80abcd91c6cd88209a61b50936d1c498bac by Xiaoyi Zhang : Make is_trivially_copy_assignable work with reference types. PiperOrigin-RevId: 204982099 -- 98c6658b3d6cd5eddba9f498747dc84c172ffe05 by Abseil Team : Fix typo in comments for c_mismatch. PiperOrigin-RevId: 204962537 -- deef8b23585f7831d67c1d4b1c9ef7f3e30d9028 by Matt Kulukundis : Internal change PiperOrigin-RevId: 204956873 GitOrigin-RevId: 28b634d3e8e879546e20006b81086a2b02390f1d Change-Id: I1da029f8cb83d83ee5a05f3b0c6a07bc3dd5368e --- absl/meta/type_traits.h | 5 +++-- absl/meta/type_traits_test.cc | 4 ++++ 2 files changed, 7 insertions(+), 2 deletions(-) (limited to 'absl/meta') diff --git a/absl/meta/type_traits.h b/absl/meta/type_traits.h index c3e01fe2..8d3264f1 100644 --- a/absl/meta/type_traits.h +++ b/absl/meta/type_traits.h @@ -263,8 +263,9 @@ struct is_trivially_copy_constructible // `is_trivially_assignable`. template struct is_trivially_copy_assignable - : std::integral_constant::value> { + : std::integral_constant< + bool, __has_trivial_assign(typename std::remove_reference::type) && + std::is_copy_assignable::value> { #ifdef ABSL_HAVE_STD_IS_TRIVIALLY_ASSIGNABLE private: static constexpr bool compliant = diff --git a/absl/meta/type_traits_test.cc b/absl/meta/type_traits_test.cc index c44d1c5f..9dd95429 100644 --- a/absl/meta/type_traits_test.cc +++ b/absl/meta/type_traits_test.cc @@ -528,6 +528,10 @@ TEST(TypeTraitsTest, TestTrivialCopyAssign) { // Verify that arrays are not trivially copy assignable using int10 = int[10]; EXPECT_FALSE(absl::is_trivially_copy_assignable::value); + + // Verify that references are handled correctly + EXPECT_TRUE(absl::is_trivially_copy_assignable::value); + EXPECT_TRUE(absl::is_trivially_copy_assignable::value); } #define ABSL_INTERNAL_EXPECT_ALIAS_EQUIVALENCE(trait_name, ...) \ -- cgit v1.2.3