http://gcc.gnu.org/bugzilla/show_bug.cgi?id=56278

             Bug #: 56278
           Summary: [4.8 Regression] unordered containers fail static
                    assertion
    Classification: Unclassified
           Product: gcc
           Version: 4.8.0
            Status: UNCONFIRMED
          Keywords: rejects-valid
          Severity: normal
          Priority: P3
         Component: libstdc++
        AssignedTo: r...@gcc.gnu.org
        ReportedBy: r...@gcc.gnu.org


#include <unordered_set>

struct hash : std::hash<int>
{
  hash() { }
};

std::unordered_set<int, hash>::local_iterator i;


In file included from
/home/jwakely/gcc/4.x/include/c++/4.8.0/unordered_set:47:0,
                 from h.cc:1:
/home/jwakely/gcc/4.x/include/c++/4.8.0/bits/hashtable.h: In instantiation of
‘class std::_Hashtable<int, int, std::allocator<int>, std::__detail::_Identity,
std::equal_to<int>, hash, std::__detail::_Mod_range_hashing,
std::__detail::_Default_ranged_hash, std::__detail::_Prime_rehash_policy,
std::__detail::_Hashtable_traits<false, true, true> >’:
/home/jwakely/gcc/4.x/include/c++/4.8.0/bits/unordered_set.h:96:18:   required
from ‘class std::unordered_set<int, hash>’
h.cc:9:30:   required from here
/home/jwakely/gcc/4.x/include/c++/4.8.0/bits/hashtable.h:267:7: error: static
assertion failed: Cache the hash code or make functors involved in hash code
and bucket index computation default constructible
       static_assert(__if_hash_not_cached<
       ^

I think the problem is that the default constructor of _Hash_code_base is not
public, so checking is_default_constructible fails.

Reply via email to