<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Issue 848: Missing std::hash specializations for std::bitset&#47;std::vector&lt;bool&gt;</title>
<meta property="og:title" content="Issue 848: Missing std::hash specializations for std::bitset&#47;std::vector&lt;bool&gt;">
<meta property="og:description" content="C++ library issue. Status: CD1">
<meta property="og:url" content="https://cplusplus.github.io/LWG/issue848.html">
<meta property="og:type" content="website">
<meta property="og:image" content="http://cplusplus.github.io/LWG/images/cpp_logo.png">
<meta property="og:image:alt" content="C++ logo">
<style>
  p {text-align:justify}
  li {text-align:justify}
  pre code.backtick::before { content: "`" }
  pre code.backtick::after { content: "`" }
  blockquote.note
  {
    background-color:#E0E0E0;
    padding-left: 15px;
    padding-right: 15px;
    padding-top: 1px;
    padding-bottom: 1px;
  }
  ins {background-color:#A0FFA0}
  del {background-color:#FFA0A0}
  table.issues-index { border: 1px solid; border-collapse: collapse; }
  table.issues-index th { text-align: center; padding: 4px; border: 1px solid; }
  table.issues-index td { padding: 4px; border: 1px solid; }
  table.issues-index td:nth-child(1) { text-align: right; }
  table.issues-index td:nth-child(2) { text-align: left; }
  table.issues-index td:nth-child(3) { text-align: left; }
  table.issues-index td:nth-child(4) { text-align: left; }
  table.issues-index td:nth-child(5) { text-align: center; }
  table.issues-index td:nth-child(6) { text-align: center; }
  table.issues-index td:nth-child(7) { text-align: left; }
  table.issues-index td:nth-child(5) span.no-pr { color: red; }
  @media (prefers-color-scheme: dark) {
     html {
        color: #ddd;
        background-color: black;
     }
     ins {
        background-color: #225522
     }
     del {
        background-color: #662222
     }
     a {
        color: #6af
     }
     a:visited {
        color: #6af
     }
     blockquote.note
     {
        background-color: rgba(255, 255, 255, .10)
     }
  }
</style>
</head>
<body>
<hr>
<p><em>This page is a snapshot from the LWG issues list, see the <a href="lwg-active.html">Library Active Issues List</a> for more information and the meaning of <a href="lwg-active.html#CD1">CD1</a> status.</em></p>
<h3 id="848"><a href="lwg-defects.html#848">848</a>. Missing <code>std::hash</code> specializations for <code>std::bitset&#47;std::vector&lt;bool&gt;</code></h3>
<p><b>Section:</b> 22.10.19 <a href="https://wg21.link/unord.hash">[unord.hash]</a> <b>Status:</b> <a href="lwg-active.html#CD1">CD1</a>
 <b>Submitter:</b> Thorsten Ottosen <b>Opened:</b> 2008-06-05 <b>Last modified:</b> 2016-01-28</p>
<p><b>Priority: </b>Not Prioritized
</p>
<p><b>View all other</b> <a href="lwg-index.html#unord.hash">issues</a> in [unord.hash].</p>
<p><b>View all issues with</b> <a href="lwg-status.html#CD1">CD1</a> status.</p>
<p><b>Discussion:</b></p>
<p>
In the current working draft, <code>std::hash&lt;T&gt;</code> is specialized for builtin
types and a few other types. Bitsets seems like one that is missing from
the list, not because it cannot not be done by the user, but because it
is hard or impossible to write an efficient implementation that works on
32bit&#47;64bit chunks at a time. For example, <code>std::bitset</code> is too much
encapsulated in this respect.
</p>


<p id="res-848"><b>Proposed resolution:</b></p>
<p>
Add the following to the synopsis in 22.10 <a href="https://wg21.link/function.objects">[function.objects]</a>/2:
</p>

<blockquote><pre>
template&lt;class Allocator&gt; struct hash&lt;std::vector&lt;bool,Allocator&gt;&gt;;
template&lt;size_t N&gt; struct hash&lt;std::bitset&lt;N&gt;&gt;;
</pre></blockquote>

<p>
Modify the last sentence of 22.10.19 <a href="https://wg21.link/unord.hash">[unord.hash]</a>/1 to end with:
</p>

<blockquote><p>
... and <code>std::string</code>, <code>std::u16string</code>, <code>std::u32string</code>, <code>std::wstring</code>,
<code>std::error_code</code>, <code>std::thread::id</code>, <code>std::bitset</code>, <code>and std::vector&lt;bool&gt;</code>.
</p></blockquote>






</body>
</html>
