
<!--
Copyright Daniel James 2005-2009
Distributed under the Boost Software License, Version 1.0. (See accompanying
file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
-->

<library-reference>
  <section id="hash.reference.specification">
    <para>For the full specification, see section 6.3 of the
        <ulink url="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2005/n1836.pdf">C++ Standard Library Technical Report</ulink>
        and issue 6.18 of the
        <ulink url="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2005/n1837.pdf">Library Extension Technical Report Issues List</ulink> (page 63).
    </para>
  </section>
  <header name="boost/functional/hash.hpp">
    <para>
      Defines <code><classname>boost::hash</classname></code>,
      and helper functions.
    </para>

    <namespace name="boost">

      <!--
        boost::hash
        -->

      <struct name="hash">
        <template>
          <template-type-parameter name="T"/>
        </template>

        <inherit access="public">
          <classname>std::unary_function&lt;T, std::size_t&gt;</classname>
        </inherit>

        <purpose><simpara>A <ulink url="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2005/n1836.pdf">TR1</ulink> compliant hash function object.</simpara></purpose>

        <method name="operator()" cv="const">
          <type>std::size_t</type>
          <parameter name="val">
            <paramtype>T const&amp;</paramtype>
          </parameter>
          <returns><para>
            <programlisting><functionname>hash_value</functionname>(val)</programlisting>
          </para></returns>
          <notes>
            <para>
              The call to <code><functionname>hash_value</functionname></code>
              is unqualified, so that custom overloads can be
              found via argument dependent lookup.
            </para>
            <para>
              This is not defined when the macro <code>BOOST_HASH_NO_EXTENSIONS</code>
              is defined. The specializations are still defined, so only the specializations
              required by TR1 are defined.
            </para>
            <para>
              Forward declared in
              <code>&lt;boost/functional/hash_fwd.hpp&gt;</code>
            </para>
          </notes>
          <throws><para>
            Only throws if
            <code><functionname>hash_value</functionname>(T)</code> throws.
          </para></throws>
        </method>
      </struct>

      <struct-specialization name="hash">
        <template></template>
        <specialization>
          <template-arg>bool</template-arg>
        </specialization>
        <method name="operator()" cv="const">
          <type>std::size_t</type>
          <parameter name="val">
            <paramtype>bool</paramtype>
          </parameter>
          <returns>
            <para>Unspecified in TR1, except that equal arguments yield the same result.</para>
            <para><functionname>hash_value</functionname>(val) in Boost.</para>
          </returns>
          <throws><para>Doesn't throw</para></throws>
        </method>
      </struct-specialization>

      <struct-specialization name="hash">
        <template></template>
        <specialization>
          <template-arg>char</template-arg>
        </specialization>
        <method name="operator()" cv="const">
          <type>std::size_t</type>
          <parameter name="val">
            <paramtype>char</paramtype>
          </parameter>
          <returns>
            <para>Unspecified in TR1, except that equal arguments yield the same result.</para>
            <para><functionname>hash_value</functionname>(val) in Boost.</para>
          </returns>
          <throws><para>Doesn't throw</para></throws>
        </method>
      </struct-specialization>

      <struct-specialization name="hash">
        <template></template>
        <specialization>
          <template-arg>signed char</template-arg>
        </specialization>
        <method name="operator()" cv="const">
          <type>std::size_t</type>
          <parameter name="val">
            <paramtype>signed char</paramtype>
          </parameter>
          <returns>
            <para>Unspecified in TR1, except that equal arguments yield the same result.</para>
            <para><functionname>hash_value</functionname>(val) in Boost.</para>
          </returns>
          <throws><para>Doesn't throw</para></throws>
        </method>
      </struct-specialization>

      <struct-specialization name="hash">
        <template></template>
        <specialization>
          <template-arg>unsigned char</template-arg>
        </specialization>
        <method name="operator()" cv="const">
          <type>std::size_t</type>
          <parameter name="val">
            <paramtype>unsigned char</paramtype>
          </parameter>
          <returns>
            <para>Unspecified in TR1, except that equal arguments yield the same result.</para>
            <para><functionname>hash_value</functionname>(val) in Boost.</para>
          </returns>
          <throws><para>Doesn't throw</para></throws>
        </method>
      </struct-specialization>

      <struct-specialization name="hash">
        <template></template>
        <specialization>
          <template-arg>wchar_t</template-arg>
        </specialization>
        <method name="operator()" cv="const">
          <type>std::size_t</type>
          <parameter name="val">
            <paramtype>wchar_t</paramtype>
          </parameter>
          <returns>
            <para>Unspecified in TR1, except that equal arguments yield the same result.</para>
            <para><functionname>hash_value</functionname>(val) in Boost.</para>
          </returns>
          <throws><para>Doesn't throw</para></throws>
        </method>
      </struct-specialization>

      <struct-specialization name="hash">
        <template></template>
        <specialization>
          <template-arg>short</template-arg>
        </specialization>
        <method name="operator()" cv="const">
          <type>std::size_t</type>
          <parameter name="val">
            <paramtype>short</paramtype>
          </parameter>
          <returns>
            <para>Unspecified in TR1, except that equal arguments yield the same result.</para>
            <para><functionname>hash_value</functionname>(val) in Boost.</para>
          </returns>
          <throws><para>Doesn't throw</para></throws>
        </method>
      </struct-specialization>

      <struct-specialization name="hash">
        <template></template>
        <specialization>
          <template-arg>unsigned short</template-arg>
        </specialization>
        <method name="operator()" cv="const">
          <type>std::size_t</type>
          <parameter name="val">
            <paramtype>unsigned short</paramtype>
          </parameter>
          <returns>
            <para>Unspecified in TR1, except that equal arguments yield the same result.</para>
            <para><functionname>hash_value</functionname>(val) in Boost.</para>
          </returns>
          <throws><para>Doesn't throw</para></throws>
        </method>
      </struct-specialization>

      <struct-specialization name="hash">
        <template></template>
        <specialization>
          <template-arg>int</template-arg>
        </specialization>
        <method name="operator()" cv="const">
          <type>std::size_t</type>
          <parameter name="val">
            <paramtype>int</paramtype>
          </parameter>
          <returns>
            <para>Unspecified in TR1, except that equal arguments yield the same result.</para>
            <para><functionname>hash_value</functionname>(val) in Boost.</para>
          </returns>
          <throws><para>Doesn't throw</para></throws>
        </method>
      </struct-specialization>

      <struct-specialization name="hash">
        <template></template>
        <specialization>
          <template-arg>unsigned int</template-arg>
        </specialization>
        <method name="operator()" cv="const">
          <type>std::size_t</type>
          <parameter name="val">
            <paramtype>unsigned int</paramtype>
          </parameter>
          <returns>
            <para>Unspecified in TR1, except that equal arguments yield the same result.</para>
            <para><functionname>hash_value</functionname>(val) in Boost.</para>
          </returns>
          <throws><para>Doesn't throw</para></throws>
        </method>
      </struct-specialization>

      <struct-specialization name="hash">
        <template></template>
        <specialization>
          <template-arg>long</template-arg>
        </specialization>
        <method name="operator()" cv="const">
          <type>std::size_t</type>
          <parameter name="val">
            <paramtype>long</paramtype>
          </parameter>
          <returns>
            <para>Unspecified in TR1, except that equal arguments yield the same result.</para>
            <para><functionname>hash_value</functionname>(val) in Boost.</para>
          </returns>
          <throws><para>Doesn't throw</para></throws>
        </method>
      </struct-specialization>

      <struct-specialization name="hash">
        <template></template>
        <specialization>
          <template-arg>unsigned long</template-arg>
        </specialization>
        <method name="operator()" cv="const">
          <type>std::size_t</type>
          <parameter name="val">
            <paramtype>unsigned long</paramtype>
          </parameter>
          <returns>
            <para>Unspecified in TR1, except that equal arguments yield the same result.</para>
            <para><functionname>hash_value</functionname>(val) in Boost.</para>
          </returns>
          <throws><para>Doesn't throw</para></throws>
        </method>
      </struct-specialization>

      <struct-specialization name="hash">
        <template></template>
        <specialization>
          <template-arg>long long</template-arg>
        </specialization>
        <method name="operator()" cv="const">
          <type>std::size_t</type>
          <parameter name="val">
            <paramtype>long long</paramtype>
          </parameter>
          <returns>
            <para>Unspecified in TR1, except that equal arguments yield the same result.</para>
            <para><functionname>hash_value</functionname>(val) in Boost.</para>
          </returns>
          <throws><para>Doesn't throw</para></throws>
        </method>
      </struct-specialization>

      <struct-specialization name="hash">
        <template></template>
        <specialization>
          <template-arg>unsigned long long</template-arg>
        </specialization>
        <method name="operator()" cv="const">
          <type>std::size_t</type>
          <parameter name="val">
            <paramtype>unsigned long long</paramtype>
          </parameter>
          <returns>
            <para>Unspecified in TR1, except that equal arguments yield the same result.</para>
            <para><functionname>hash_value</functionname>(val) in Boost.</para>
          </returns>
          <throws><para>Doesn't throw</para></throws>
        </method>
      </struct-specialization>

      <struct-specialization name="hash">
        <template></template>
        <specialization>
          <template-arg>float</template-arg>
        </specialization>
        <method name="operator()" cv="const">
          <type>std::size_t</type>
          <parameter name="val">
            <paramtype>float</paramtype>
          </parameter>
          <returns>
            <para>Unspecified in TR1, except that equal arguments yield the same result.</para>
            <para><functionname>hash_value</functionname>(val) in Boost.</para>
          </returns>
          <throws><para>Doesn't throw</para></throws>
        </method>
      </struct-specialization>

      <struct-specialization name="hash">
        <template></template>
        <specialization>
          <template-arg>double</template-arg>
        </specialization>
        <method name="operator()" cv="const">
          <type>std::size_t</type>
          <parameter name="val">
            <paramtype>double</paramtype>
          </parameter>
          <returns>
            <para>Unspecified in TR1, except that equal arguments yield the same result.</para>
            <para><functionname>hash_value</functionname>(val) in Boost.</para>
          </returns>
          <throws><para>Doesn't throw</para></throws>
        </method>
      </struct-specialization>

      <struct-specialization name="hash">
        <template></template>
        <specialization>
          <template-arg>long double</template-arg>
        </specialization>
        <method name="operator()" cv="const">
          <type>std::size_t</type>
          <parameter name="val">
            <paramtype>long double</paramtype>
          </parameter>
          <returns>
            <para>Unspecified in TR1, except that equal arguments yield the same result.</para>
            <para><functionname>hash_value</functionname>(val) in Boost.</para>
          </returns>
          <throws><para>Doesn't throw</para></throws>
        </method>
      </struct-specialization>

      <struct-specialization name="hash">
        <template></template>
        <specialization>
          <template-arg>std::string</template-arg>
        </specialization>
        <method name="operator()" cv="const">
          <type>std::size_t</type>
          <parameter name="val">
            <paramtype>std::string const&amp;</paramtype>
          </parameter>
          <returns>
            <para>Unspecified in TR1, except that equal arguments yield the same result.</para>
            <para><functionname>hash_value</functionname>(val) in Boost.</para>
          </returns>
          <throws><para>Doesn't throw</para></throws>
        </method>
      </struct-specialization>

      <struct-specialization name="hash">
        <template></template>
        <specialization>
          <template-arg>std::wstring</template-arg>
        </specialization>
        <method name="operator()" cv="const">
          <type>std::size_t</type>
          <parameter name="val">
            <paramtype>std::wstring const&amp;</paramtype>
          </parameter>
          <returns>
            <para>Unspecified in TR1, except that equal arguments yield the same result.</para>
            <para><functionname>hash_value</functionname>(val) in Boost.</para>
          </returns>
          <throws><para>Doesn't throw</para></throws>
        </method>
      </struct-specialization>

      <struct-specialization name="hash">
        <template>
          <template-type-parameter name="T"/>
        </template>
        <specialization>
          <template-arg>T*</template-arg>
        </specialization>
        <method name="operator()" cv="const">
          <type>std::size_t</type>
          <parameter name="val">
            <paramtype>T*</paramtype>
          </parameter>
          <returns>
            <para>Unspecified in TR1, except that equal arguments yield the same result.</para>
          </returns>
          <throws><para>Doesn't throw</para></throws>
        </method>
      </struct-specialization>

      <struct-specialization name="hash">
        <template></template>
        <specialization>
          <template-arg>std::type_index</template-arg>
        </specialization>
        <method name="operator()" cv="const">
          <type>std::size_t</type>
          <parameter name="val">
            <paramtype>std::type_index</paramtype>
          </parameter>
          <returns>
            <para><code>val.hash_code()</code></para>
          </returns>
          <throws><para>Doesn't throw</para></throws>
        </method>
        <notes>
          <para>
            Only available if it's in your standard library and Boost.Config
            is aware of it.
          </para>
        </notes>
      </struct-specialization>

      <free-function-group name="Support functions (Boost extension)."> 

      <!--
        boost::hash_combine
        -->

      <function name="hash_combine">
        <template>
          <template-type-parameter name="T"/>
        </template>
        <type>void</type>
        <parameter name="seed"><paramtype>size_t &amp;</paramtype></parameter>
        <parameter name="v"><paramtype>T const&amp;</paramtype></parameter>
        <purpose><simpara>
            Called repeatedly to incrementally create a hash value from
            several variables.
        </simpara></purpose>
        <effects><programlisting>seed ^= <functionname>hash_value</functionname>(v) + 0x9e3779b9 + (seed &lt;&lt; 6) + (seed &gt;&gt; 2);</programlisting></effects>
        <notes>
          <para><functionname>hash_value</functionname> is called without
          qualification, so that overloads can be found via ADL.</para>
          <para>This is an extension to TR1</para>
          <para>
            Forward declared in
            <code>&lt;boost/functional/hash_fwd.hpp&gt;</code>
          </para>
        </notes>
        <throws>
          Only throws if <functionname>hash_value</functionname>(T) throws.
          Strong exception safety, as long as <functionname>hash_value</functionname>(T)
          also has strong exception safety.
        </throws>
      </function>

      <!--
        boost::hash_range
        -->

      <overloaded-function name="hash_range">
        <signature>
          <template>
            <template-type-parameter name="It"/>
          </template>
          <type>std::size_t</type>
          <parameter name="first"><paramtype>It</paramtype></parameter>
          <parameter name="last"><paramtype>It</paramtype></parameter>
        </signature>

        <signature>
          <template>
            <template-type-parameter name="It"/>
          </template>
          <type>void</type>
          <parameter name="seed"><paramtype>std::size_t&amp;</paramtype></parameter>
          <parameter name="first"><paramtype>It</paramtype></parameter>
          <parameter name="last"><paramtype>It</paramtype></parameter>
        </signature>

        <purpose><simpara>
            Calculate the combined hash value of the elements of an iterator
            range.
        </simpara></purpose>
        <effects>
          <para>For the two argument overload:
<programlisting>
size_t seed = 0;

for(; first != last; ++first)
{
    <functionname>hash_combine</functionname>(seed, *first);
}

return seed;
</programlisting>
          </para>
          <para>For the three arguments overload:</para>
<programlisting>
for(; first != last; ++first)
{
    <functionname>hash_combine</functionname>(seed, *first);
}
</programlisting>
        </effects>
        <notes>
          <para>
            <code>hash_range</code> is sensitive to the order of the elements
            so it wouldn't be appropriate to use this with an unordered
            container.
          </para>
          <para>This is an extension to TR1</para>
          <para>
            Forward declared in
            <code>&lt;boost/functional/hash_fwd.hpp&gt;</code>
          </para>
        </notes>
        <throws><para>
          Only throws if <code><functionname>hash_value</functionname>(std::iterator_traits&lt;It&gt;::value_type)</code>
          throws. <code>hash_range(std::size_t&amp;, It, It)</code> has basic exception safety as long as
          <code><functionname>hash_value</functionname>(std::iterator_traits&lt;It&gt;::value_type)</code>
          has basic exception safety.
        </para></throws>
      </overloaded-function>

      </free-function-group>

      <free-function-group name="Overloadable hash implementation (Boost extension).">

      <!--
        boost::hash_value - integers
        -->

      <overloaded-function name="hash_value">
        <purpose><simpara>
            Implementation of the hash function.
        </simpara></purpose>

        <signature>
          <type>std::size_t</type>
          <parameter name="val"><paramtype>bool</paramtype></parameter>
        </signature>

        <signature>
          <type>std::size_t</type>
          <parameter name="val"><paramtype>char</paramtype></parameter>
        </signature>

        <signature>
          <type>std::size_t</type>
          <parameter name="val"><paramtype>signed char</paramtype></parameter>
        </signature>

        <signature>
          <type>std::size_t</type>
          <parameter name="val"><paramtype>unsigned char</paramtype></parameter>
        </signature>

        <signature>
          <type>std::size_t</type>
          <parameter name="val"><paramtype>wchar_t</paramtype></parameter>
        </signature>

        <signature>
          <type>std::size_t</type>
          <parameter name="val"><paramtype>short</paramtype></parameter>
        </signature>

        <signature>
          <type>std::size_t</type>
          <parameter name="val"><paramtype>unsigned short</paramtype></parameter>
        </signature>

        <signature>
          <type>std::size_t</type>
          <parameter name="val"><paramtype>int</paramtype></parameter>
        </signature>

        <signature>
          <type>std::size_t</type>
          <parameter name="val"><paramtype>unsigned int</paramtype></parameter>
        </signature>

        <signature>
          <type>std::size_t</type>
          <parameter name="val"><paramtype>long</paramtype></parameter>
        </signature>

        <signature>
          <type>std::size_t</type>
          <parameter name="val"><paramtype>unsigned long</paramtype></parameter>
        </signature>

        <signature>
          <type>std::size_t</type>
          <parameter name="val"><paramtype>long long</paramtype></parameter>
        </signature>

        <signature>
          <type>std::size_t</type>
          <parameter name="val"><paramtype>unsigned long long</paramtype></parameter>
        </signature>

        <signature>
          <type>std::size_t</type>
          <parameter name="val"><paramtype>float</paramtype></parameter>
        </signature>

        <signature>
          <type>std::size_t</type>
          <parameter name="val"><paramtype>double</paramtype></parameter>
        </signature>

        <signature>
          <type>std::size_t</type>
          <parameter name="val"><paramtype>long double</paramtype></parameter>
        </signature>

        <signature>
          <template><template-type-parameter name="T"/></template>
          <type>std::size_t</type>
          <parameter name="val"><paramtype>T* const&amp;</paramtype></parameter>
        </signature>

        <signature>
          <template>
            <template-type-parameter name="T"/>
            <template-nontype-parameter name="N"><type>unsigned</type></template-nontype-parameter>
          </template>
          <type>std::size_t</type>
          <parameter><paramtype>T (&amp;val)[N]</paramtype></parameter>
        </signature>

        <signature>
          <template>
            <template-type-parameter name="T"/>
            <template-nontype-parameter name="N"><type>unsigned</type></template-nontype-parameter>
          </template>
          <type>std::size_t</type>
          <parameter><paramtype>const T (&amp;val)[N]</paramtype></parameter>
        </signature>

        <signature>
          <template>
            <template-type-parameter name="Ch"/>
            <template-type-parameter name="A"/>
          </template>
          <type>std::size_t</type>
          <parameter name="val">
              <paramtype>std::basic_string&lt;Ch, std::char_traits&lt;Ch&gt;, A&gt; const&amp;</paramtype>
          </parameter>
        </signature>
              
       <signature>
          <template>
            <template-type-parameter name="A"/>
            <template-type-parameter name="B"/>
          </template>
          <type>std::size_t</type>
          <parameter name="val"><paramtype>std::pair&lt;A, B&gt; const&amp;</paramtype></parameter>
        </signature>

        <signature>
          <template>
            <template-type-parameter name="T"/>
            <template-type-parameter name="A"/>
          </template>
          <type>std::size_t</type>
          <parameter name="val"><paramtype>std::vector&lt;T, A&gt; const&amp;</paramtype></parameter>
        </signature>

        <signature>
          <template>
            <template-type-parameter name="T"/>
            <template-type-parameter name="A"/>
          </template>
          <type>std::size_t</type>
          <parameter name="val"><paramtype>std::list&lt;T, A&gt; const&amp;</paramtype></parameter>
        </signature>

        <signature>
          <template>
            <template-type-parameter name="T"/>
            <template-type-parameter name="A"/>
          </template>
          <type>std::size_t</type>
          <parameter name="val"><paramtype>std::deque&lt;T, A&gt; const&amp;</paramtype></parameter>
        </signature>

        <signature>
          <template>
            <template-type-parameter name="K"/>
            <template-type-parameter name="C"/>
            <template-type-parameter name="A"/>
          </template>
          <type>std::size_t</type>
          <parameter name="val"><paramtype>std::set&lt;K, C, A&gt; const&amp;</paramtype></parameter>
        </signature>

        <signature>
          <template>
            <template-type-parameter name="K"/>
            <template-type-parameter name="C"/>
            <template-type-parameter name="A"/>
          </template>
          <type>std::size_t</type>
          <parameter name="val"><paramtype>std::multiset&lt;K, C, A&gt; const&amp;</paramtype></parameter>
        </signature>

        <signature>
          <template>
            <template-type-parameter name="K"/>
            <template-type-parameter name="T"/>
            <template-type-parameter name="C"/>
            <template-type-parameter name="A"/>
          </template>
          <type>std::size_t</type>
          <parameter name="val"><paramtype>std::map&lt;K, T, C, A&gt; const&amp;</paramtype></parameter>
        </signature>

        <signature>
          <template>
            <template-type-parameter name="K"/>
            <template-type-parameter name="T"/>
            <template-type-parameter name="C"/>
            <template-type-parameter name="A"/>
          </template>
          <type>std::size_t</type>
          <parameter name="val"><paramtype>std::multimap&lt;K, T, C, A&gt; const&amp;</paramtype></parameter>
        </signature>

        <signature>
          <template>
            <template-type-parameter name="T"/>
          </template>
          <type>std::size_t</type>
          <parameter name="val"><paramtype>std::complex&lt;T&gt; const&amp;</paramtype></parameter>
        </signature>

        <signature>
          <type>std::size_t</type>
          <parameter name="val"><paramtype>std::type_index</paramtype></parameter>
        </signature>

        <signature>
          <template>
            <template-type-parameter name="T"/>
            <template-nontype-parameter name="N">
              <type>std::size_t</type>
            </template-nontype-parameter>
          </template>
          <type>std::size_t</type>
          <parameter name="val"><paramtype>std::array&lt;T, N&gt; const&amp;</paramtype></parameter>
        </signature>

        <signature>
          <template>
            <template-type-parameter name="T" pack="1"/>
          </template>
          <type>std::size_t</type>
          <parameter name="val"><paramtype>std::tuple&lt;T...&gt;</paramtype></parameter>
        </signature>

        <description><para>
          Generally shouldn't be called directly by users, instead they should use
          <classname>boost::hash</classname>, <functionname>boost::hash_range</functionname>
          or <functionname>boost::hash_combine</functionname> which
          call <code>hash_value</code> without namespace qualification so that overloads
          for custom types are found via ADL.
        </para></description>

        <notes>
          <para>This is an extension to TR1</para>
        </notes>

        <throws>
            Only throws if a user supplied version of
            <code><functionname>hash_value</functionname></code>
            throws for an element of a container, or
            one of the types stored in a pair.
        </throws>

        <returns>
          <informaltable>
            <tgroup cols="2">
              <thead>
                <row>
                  <entry>Types</entry>
                  <entry>Returns</entry>
                </row>
              </thead>
              <tbody>
                <row>
                  <entry><code>bool</code>,
                    <code>char</code>, <code>signed char</code>, <code>unsigned char</code>, <code>wchar_t</code>,
                    <code>short</code>, <code>unsigned short</code>,
                    <code>int</code>, <code>unsigned int</code>, <code>long</code>, <code>unsigned long</code>
                  </entry>
                  <entry><code>val</code></entry>
                </row>
                <row>
                  <entry><code>long long</code>, <code>unsigned long long</code></entry>
                  <entry><code>val</code> when <code>abs(val) &lt;= std::numeric_limits&lt;std::size_t&gt;::max()</code>.</entry>
                </row>
                <row>
                  <entry><code>float</code>, <code>double</code>, <code>long double</code></entry>
                  <entry>An unspecified value, except that equal arguments shall yield the same result.</entry>
                </row>
                <row>
                  <entry><code>T*</code></entry>
                  <entry>An unspecified value, except that equal arguments shall yield the same result.</entry>
                </row>
                <row>
                  <entry>
                    <code>T&#160;val[N]</code>,
                    <code>const&#160;T&#160;val[N]</code>
                  </entry>
                  <entry><code>hash_range(val, val+N)</code></entry>
                </row>
                <row>
                  <entry>
                    <code>std:basic_string&lt;Ch,&#160;std::char_traits&lt;Ch&gt;,&#160;A&gt;</code>,
                    <code>std::vector&lt;T,&#160;A&gt;</code>,
                    <code>std::list&lt;T,&#160;A&gt;</code>,
                    <code>std::deque&lt;T,&#160;A&gt;</code>,
                    <code>std::set&lt;K,&#160;C,&#160;A&gt;</code>,
                    <code>std::multiset&lt;K,&#160;C,&#160;A&gt;</code>,
                    <code>std::map&lt;K,&#160;T,&#160;C,&#160;A&gt;</code>,
                    <code>std::multimap&lt;K,&#160;T,&#160;C,&#160;A&gt;</code>,
                    <code>std::array&lt;T,&#160;N&gt;</code>
                  </entry>
                  <entry><code>hash_range(val.begin(), val.end())</code></entry>
                </row>
                <row>
                  <entry><code>std::pair&lt;A, B&gt;</code></entry>
                  <entry><programlisting>size_t seed = 0;
<functionname>hash_combine</functionname>(seed, val.first);
<functionname>hash_combine</functionname>(seed, val.second);
return seed;</programlisting></entry>
                </row>
                <row>
                  <entry><code>std::tuple&lt;T...&gt;</code></entry>
                  <entry><programlisting>size_t seed = 0;
<functionname>hash_combine</functionname>(seed, get&lt;0&gt;(val));
<functionname>hash_combine</functionname>(seed, get&lt;1&gt;(val));
// ....
return seed;</programlisting></entry>
                </row>
                <row>
                  <entry>
                    <code>std::complex&lt;T&gt;</code>
                  </entry>
                  <entry>When <code>T</code> is a built in type and <code>val.imag() == 0</code>, the result is equal to <code>hash_value(val.real())</code>. Otherwise an unspecified value, except that equal arguments shall yield the same result.</entry>
                </row>
                <row>
                  <entry>
                    <code>std::type_index</code>
                  </entry>
                  <entry><code>val.hash_code()</code></entry>
                </row>
              </tbody>
            </tgroup>
          </informaltable>
        </returns>
      </overloaded-function>
      </free-function-group>
    </namespace>
  </header>
</library-reference>

