aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFrançois Dumont <fdumont@gcc.gnu.org>2013-02-13 21:09:34 +0000
committerFrançois Dumont <fdumont@gcc.gnu.org>2013-02-13 21:09:34 +0000
commitd9a3647a22f7a446ab6d1699deeff2779790090b (patch)
tree3f249c05c448b1fb49af8d73b389869eeb0bc43c
parentc4bfe8bfdb11a5fe0734b84a3c60b4db312b22f1 (diff)
downloadgcc-d9a3647a22f7a446ab6d1699deeff2779790090b.zip
gcc-d9a3647a22f7a446ab6d1699deeff2779790090b.tar.gz
gcc-d9a3647a22f7a446ab6d1699deeff2779790090b.tar.bz2
hashtable_policy.h (_Hash_code_base): Restore default constructor protected.
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. From-SVN: r196030
-rw-r--r--libstdc++-v3/ChangeLog7
-rw-r--r--libstdc++-v3/include/bits/hashtable.h5
-rw-r--r--libstdc++-v3/include/bits/hashtable_policy.h14
3 files changed, 17 insertions, 9 deletions
diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog
index 03df2a5..338d5d7 100644
--- a/libstdc++-v3/ChangeLog
+++ b/libstdc++-v3/ChangeLog
@@ -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
diff --git a/libstdc++-v3/include/bits/hashtable.h b/libstdc++-v3/include/bits/hashtable.h
index b82cda3..246e9bb 100644
--- a/libstdc++-v3/include/bits/hashtable.h
+++ b/libstdc++-v3/include/bits/hashtable.h
@@ -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");
diff --git a/libstdc++-v3/include/bits/hashtable_policy.h b/libstdc++-v3/include/bits/hashtable_policy.h
index a88b32e..f75f49f 100644
--- a/libstdc++-v3/include/bits/hashtable_policy.h
+++ b/libstdc++-v3/include/bits/hashtable_policy.h
@@ -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&)