diff options
author | Abseil Team <absl-team@google.com> | 2018-04-20T16·16-0700 |
---|---|---|
committer | Jon Cohen <cohenjon@google.com> | 2018-04-20T16·30-0400 |
commit | faf0a1b90374eab44e8956973b0e13febdcf3377 (patch) | |
tree | 63a7fd12a50b15c4a321e8373c1bbd975df0b7ba /absl/meta/type_traits.h | |
parent | 5b535401665cc6aa96d54a5c9b0901153d97210f (diff) |
- 551e205ef49682a1cb7e6e0cda46957fbcf88edd Release absl::variant. by Xiaoyi Zhang <zhangxy@google.com>
- 01c52f640594d073c6e54c47e7853b25522cf085 Update comments in absl::variant (and minor changes to ab... by Tom Manshreck <shreck@google.com> - 064465e1e6b158abd8c38fd1942b4fc464b57d6a Documentation change. by Abseil Team <absl-team@google.com> - 58df2c8a27e80c9ea21d87c1acee8019246377c9 Relocates SetCountdown and UnsetCountdown to the exceptio... by Abseil Team <absl-team@google.com> - fd9d248d0948d472f2543f7fd9c0ae4a1cd60d01 Clarify thread_annotation.h documentation around local va... by Abseil Team <absl-team@google.com> - 0d0abaf7f0945ac5f2c5f49e78afe1b326d5aca0 Typo fix in comments. by Abseil Team <absl-team@google.com> - 67286d587cbd07508a81e5b8147c245a5b5538b4 Internal change. by Xiaoyi Zhang <zhangxy@google.com> GitOrigin-RevId: 551e205ef49682a1cb7e6e0cda46957fbcf88edd Change-Id: I1a343b080187293cb5f892a309618b5712e7aa14
Diffstat (limited to 'absl/meta/type_traits.h')
-rw-r--r-- | absl/meta/type_traits.h | 19 |
1 files changed, 19 insertions, 0 deletions
diff --git a/absl/meta/type_traits.h b/absl/meta/type_traits.h index ac5d8e1ca7f8..bb1b0baf1ab3 100644 --- a/absl/meta/type_traits.h +++ b/absl/meta/type_traits.h @@ -36,6 +36,7 @@ #define ABSL_META_TYPE_TRAITS_H_ #include <stddef.h> +#include <functional> #include <type_traits> #include "absl/base/config.h" @@ -349,5 +350,23 @@ using underlying_type_t = typename std::underlying_type<T>::type; template <typename T> using result_of_t = typename std::result_of<T>::type; +namespace type_traits_internal { +template <typename Key, typename = size_t> +struct IsHashable : std::false_type {}; + +template <typename Key> +struct IsHashable<Key, + decltype(std::declval<std::hash<Key>>()(std::declval<Key>()))> + : std::true_type {}; + +template <typename Key> +struct IsHashEnabled + : absl::conjunction<std::is_default_constructible<std::hash<Key>>, + std::is_copy_constructible<std::hash<Key>>, + std::is_destructible<std::hash<Key>>, + std::is_copy_assignable<std::hash<Key>>, + IsHashable<Key>> {}; +} // namespace type_traits_internal + } // namespace absl #endif // ABSL_META_TYPE_TRAITS_H_ |