The unified diff between revisions [9b06d7a6..] and [b43e6a50..] is displayed below. It can also be downloaded as a raw diff.

#
#
# patch "test.cc"
#  from [601b75b1a52d72a222ee4d2ae83a42e8bb0605db]
#    to [499b68055943d776d47fc9cc587c60b52a124475]
#
# patch "tokens.hh"
#  from [ae9d9d87c06dddb9997b1fb4869b4c296c437c82]
#    to [75cd224b6bc28642e53c9f04d257224165776f45]
#
# patch "tokens_test.cc"
#  from [7a4d4f8cc9898703a87e8445b797e65f46e1ea74]
#    to [9c0ec9ccebc6a0e1d4097cd7fc0d50352f941f71]
#
============================================================
--- test.cc	601b75b1a52d72a222ee4d2ae83a42e8bb0605db
+++ test.cc	499b68055943d776d47fc9cc587c60b52a124475
@@ -7,7 +7,7 @@ main (int argc, char *argv[])
 int
 main (int argc, char *argv[])
 {
-    __gnu_cxx::hash_map<std::string, int, string_hash<std::string> > h;
+    __gnu_cxx::hash_map<std::string, int> h;
     std::string blah("test"), cat("goat");

     h[blah] = 2;
============================================================
--- tokens.hh	ae9d9d87c06dddb9997b1fb4869b4c296c437c82
+++ tokens.hh	75cd224b6bc28642e53c9f04d257224165776f45
@@ -7,19 +7,15 @@ typedef unsigned long int token_t;

 typedef unsigned long int token_t;

-template<class T>
-class string_hash
-{
-private:
-    __gnu_cxx::hash<char *> h;
-
-public:
-    size_t
-    operator()(const T &s) const
+namespace __gnu_cxx {
+    template <>
+    struct hash<std::string>
     {
-        return h (s.c_str ());
-    }
-};
+      size_t
+      operator()(std::string __s) const
+      { return __gnu_cxx::hash<char *>()(__s.c_str ()); }
+    };
+}

 template<class T, class H = __gnu_cxx::hash<T> >
 class Tokens {
@@ -43,9 +39,8 @@ class Tokens {

             tid = token_to_id[add];
             if (tid == 0) {
-                T our_copy = add;
-                tid = token_to_id[our_copy] = ++last_id;
-                id_to_token[tid] = our_copy;
+                tid = token_to_id[add] = ++last_id;
+                id_to_token[tid] = add;
             }
             stash.push_back (tid);
             return tid;
============================================================
--- tokens_test.cc	7a4d4f8cc9898703a87e8445b797e65f46e1ea74
+++ tokens_test.cc	9c0ec9ccebc6a0e1d4097cd7fc0d50352f941f71
@@ -2,8 +2,10 @@
 #include <iostream>
 #include "tokens.hh"

+typedef Tokens<std::string> s_tok;
+
 void
-string_test (Tokens<std::string, string_hash<std::string> > &t)
+string_test (s_tok &t)
 {
     std::string s;

@@ -13,7 +15,7 @@ void
 }

 void
-input_test (Tokens<std::string, string_hash<std::string> > &t)
+input_test (s_tok &t)
 {
     std::string i;

@@ -26,7 +28,7 @@ test (void)
 void
 test (void)
 {
-    Tokens<std::string, string_hash<std::string> > t;
+    s_tok t;

     string_test (t);
     input_test (t);