raw_ptr: add std::hash support

Change-Id: I6bdcc8fa747d5d76d385115d995dd45809864255
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/207675
Reviewed-by: Arthur Sonzogni <arthursonzogni@chromium.org>
Commit-Queue: Jiawei Shao <jiawei.shao@intel.com>
Reviewed-by: Jiawei Shao <jiawei.shao@intel.com>
diff --git a/src/dawn/partition_alloc/partition_alloc/pointers/raw_ptr.h b/src/dawn/partition_alloc/partition_alloc/pointers/raw_ptr.h
index f61f04f..e674987 100644
--- a/src/dawn/partition_alloc/partition_alloc/pointers/raw_ptr.h
+++ b/src/dawn/partition_alloc/partition_alloc/pointers/raw_ptr.h
@@ -367,6 +367,13 @@
     bool operator()(const raw_ptr<T, Traits>& lhs, T* rhs) const { return lhs < rhs; }
 };
 
+template <typename T, RawPtrTraits Traits>
+struct hash<raw_ptr<T, Traits>> {
+    typedef raw_ptr<T, Traits> argument_type;
+    typedef std::size_t result_type;
+    result_type operator()(argument_type const& ptr) const { return hash<T*>()(ptr.get()); }
+};
+
 // Define for cases where raw_ptr<T> holds a pointer to an array of type T. This is consistent with
 // definition of std::iterator_traits<T*>. Algorithms like std::binary_search need that.
 template <typename T, RawPtrTraits Traits>