about summary refs log tree commit diff
path: root/absl/meta
diff options
context:
space:
mode:
authorAbseil Team <absl-team@google.com>2018-07-18T17·04-0700
committerAshley Hedberg <ahedberg@google.com>2018-07-18T17·09-0400
commit42f22a28401c952f1fc5942231c7fdac80811bf5 (patch)
tree3e0b5b07647b5d5bc36fb4ef026027cdb298f7d9 /absl/meta
parentb973bc53ef366f0253b85eeed9a79b241884a843 (diff)
Export of internal Abseil changes.
--
28b634d3e8e879546e20006b81086a2b02390f1d by Abseil Team <absl-team@google.com>:

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 <zhangxy@google.com>:

Make is_trivially_copy_assignable work with reference types.

PiperOrigin-RevId: 204982099

--
98c6658b3d6cd5eddba9f498747dc84c172ffe05 by Abseil Team <absl-team@google.com>:

Fix typo in comments for c_mismatch.

PiperOrigin-RevId: 204962537

--
deef8b23585f7831d67c1d4b1c9ef7f3e30d9028 by Matt Kulukundis <kfm@google.com>:

Internal change

PiperOrigin-RevId: 204956873
GitOrigin-RevId: 28b634d3e8e879546e20006b81086a2b02390f1d
Change-Id: I1da029f8cb83d83ee5a05f3b0c6a07bc3dd5368e
Diffstat (limited to 'absl/meta')
-rw-r--r--absl/meta/type_traits.h5
-rw-r--r--absl/meta/type_traits_test.cc4
2 files changed, 7 insertions, 2 deletions
diff --git a/absl/meta/type_traits.h b/absl/meta/type_traits.h
index c3e01fe2990c..8d3264f100db 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<T&, const T&>`.
 template <typename T>
 struct is_trivially_copy_assignable
-    : std::integral_constant<bool, __has_trivial_assign(T) &&
-                                   std::is_copy_assignable<T>::value> {
+    : std::integral_constant<
+          bool, __has_trivial_assign(typename std::remove_reference<T>::type) &&
+                    std::is_copy_assignable<T>::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 c44d1c5ff850..9dd95429a5a1 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<int10>::value);
+
+  // Verify that references are handled correctly
+  EXPECT_TRUE(absl::is_trivially_copy_assignable<Trivial&&>::value);
+  EXPECT_TRUE(absl::is_trivially_copy_assignable<Trivial&>::value);
 }
 
 #define ABSL_INTERNAL_EXPECT_ALIAS_EQUIVALENCE(trait_name, ...)          \