fbstring: Fix std::hash specializations for non-char types
authorTavian Barnes <tavianator@tavianator.com>
Thu, 14 Jul 2016 18:11:22 +0000 (11:11 -0700)
committerFacebook Github Bot 1 <facebook-github-bot-1-bot@fb.com>
Thu, 14 Jul 2016 18:23:31 +0000 (11:23 -0700)
Summary: Closes https://github.com/facebook/folly/pull/407

Reviewed By: ot

Differential Revision: D3428571

Pulled By: Orvid

fbshipit-source-id: 0b82afae2df24803250e8d6005e2e59bbc8348c9

folly/FBString.h
folly/test/FBStringTest.cpp

index 0c8273e5a19371b7f5db198e478ef45a31e53246..9a50e29958d27496fd49fa19530c029d44e3aced 100644 (file)
@@ -2441,7 +2441,7 @@ _GLIBCXX_END_NAMESPACE_VERSION
 #define FOLLY_FBSTRING_HASH1(T) \
   template <> \
   struct hash< ::folly::basic_fbstring<T> > { \
-    size_t operator()(const ::folly::fbstring& s) const { \
+    size_t operator()(const ::folly::basic_fbstring<T>& s) const { \
       return ::folly::hash::fnv32_buf(s.data(), s.size()); \
     } \
   };
index e8644482e735a53abf3be124e95bc8356892e06c..1bc36391f88eb7a2afde2eabe9095c9f94407aa0 100644 (file)
@@ -1287,6 +1287,18 @@ TEST(FBString, testHash) {
   EXPECT_NE(hashfunc(a), hashfunc(b));
 }
 
+TEST(FBString, testHashChar16) {
+  using u16fbstring = basic_fbstring<char16_t>;
+  u16fbstring a;
+  u16fbstring b;
+  a.push_back(0);
+  a.push_back(1);
+  b.push_back(0);
+  b.push_back(2);
+  std::hash<u16fbstring> hashfunc;
+  EXPECT_NE(hashfunc(a), hashfunc(b));
+}
+
 TEST(FBString, testFrontBack) {
   fbstring str("hello");
   EXPECT_EQ(str.front(), 'h');