title: How to unordered_set<tuple<int,int>>?
body: <p>I had encountered strange problem while construct a <code>unordeed_set&lt;tuple&lt;int,int&gt;&gt;</code>. I had tried VC++8, gcc3.2, gcc4.3, all have the same result. I have no idea what's wrong with the code, following is my code:</p>
  
  <pre><code>#include &lt;boost/unordered_set.hpp&gt;
  #include &lt;boost/tuple/tuple.hpp&gt;
  // For unordered container, the declaration of operator==
  #include &lt;boost/tuple/tuple_comparison.hpp&gt;
  
  using namespace std ;
  using namespace boost ;
  
  // define of the hash_value funciton for tuple&lt;int, int&gt;
  size_t hash_value(tuple&lt;int, int&gt; const&amp; t) {
      return get&lt;0&gt;(t) * 10 + get&lt;1&gt;(t) ;
  }
  
  int main () {
      unordered_set&lt;tuple&lt;int, int&gt;&gt; s ;
      tuple&lt;int, int&gt; t ;
      s.insert(t) ;
  }
  </code></pre>
  
  <p>Here is the compile error message:</p>
  
  <pre><code>1&gt;c:\libs\boost_1_37_0\boost\functional\hash\extensions.hpp(72) : error C2665: 'boost::hash_value' : none of the 16 overloads could convert all the argument types
  1&gt;        c:\libs\boost_1_37_0\boost\functional\hash\hash.hpp(33): could be 'size_t boost::hash_value(bool)'
  1&gt;        c:\libs\boost_1_37_0\boost\functional\hash\hash.hpp(34): or       'size_t boost::hash_value(char)'
  1&gt;        c:\libs\boost_1_37_0\boost\functional\hash\hash.hpp(35): or       'size_t boost::hash_value(unsigned char)'
  ....
  </code></pre>
  
  <p>It seems the compiler can not see the definition of <code>hash_value(tuple&lt;int, int&gt;)</code>. But if I replace the <code>tuple&lt;int, int&gt;</code> to other data type like <code>struct F{int a, b;}</code> and it works. That's really strange. Do I miss anything? Thank you very much.</p>