2013-02-13 François Dumont <fdumont@gcc.gnu.org>
authorfdumont <fdumont@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 13 Feb 2013 21:09:34 +0000 (21:09 +0000)
committerfdumont <fdumont@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 13 Feb 2013 21:09:34 +0000 (21:09 +0000)
* include/bits/hashtable_policy.h (_Hash_code_base): Restore
default constructor protected.
* include/bits/hashtable.h: static assert that _Hash_code_base has
a default constructor available through inheritance.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@196030 138bc75d-0d04-0410-961f-82ee72b054a4

libstdc++-v3/ChangeLog
libstdc++-v3/include/bits/hashtable.h
libstdc++-v3/include/bits/hashtable_policy.h

index 03df2a5..338d5d7 100644 (file)
@@ -1,3 +1,10 @@
+2013-02-13  François Dumont  <fdumont@gcc.gnu.org>
+
+       * include/bits/hashtable_policy.h (_Hash_code_base): Restore
+       default constructor protected.
+       * include/bits/hashtable.h: static assert that _Hash_code_base has
+       a default constructor available through inheritance.
+
 2013-02-12  Paolo Carlini  <paolo.carlini@oracle.com>
 
        * include/c_std/cstdlib (at_quick_exit, quick_exit): Provide in
index b82cda3..246e9bb 100644 (file)
@@ -266,7 +266,10 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
       // __hash_code_base above to compute node bucket index so it has to be
       // default constructible.
       static_assert(__if_hash_not_cached<
-                     is_default_constructible<__hash_code_base>>::value,
+                   is_default_constructible<
+                     // We use _Hashtable_ebo_helper to access the protected
+                     // default constructor.
+                     __detail::_Hashtable_ebo_helper<0, __hash_code_base>>>::value,
                    "Cache the hash code or make functors involved in hash code"
                    " and bucket index computation default constructible");
 
index a88b32e..f75f49f 100644 (file)
@@ -918,15 +918,13 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
       using __ebo_extract_key = _Hashtable_ebo_helper<0, _ExtractKey>;
       using __ebo_hash = _Hashtable_ebo_helper<1, _Hash>;
 
-    public:
-      // We need the default constructor for the local iterators.
-      _Hash_code_base() = default;
-
     protected:
       typedef void*                                    __hash_code;
       typedef _Hash_node<_Value, false>                        __node_type;
 
-    protected:
+      // We need the default constructor for the local iterators.
+      _Hash_code_base() = default;
+
       _Hash_code_base(const _ExtractKey& __ex, const _H1&, const _H2&,
                      const _Hash& __h)
       : __ebo_extract_key(__ex), __ebo_hash(__h) { }
@@ -1004,13 +1002,13 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
       hash_function() const
       { return _M_h1(); }
 
-      // We need the default constructor for the local iterators.
-      _Hash_code_base() = default;
-
     protected:
       typedef std::size_t                              __hash_code;
       typedef _Hash_node<_Value, false>                        __node_type;
 
+      // We need the default constructor for the local iterators.
+      _Hash_code_base() = default;
+
       _Hash_code_base(const _ExtractKey& __ex,
                      const _H1& __h1, const _H2& __h2,
                      const _Default_ranged_hash&)