From d9a3647a22f7a446ab6d1699deeff2779790090b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Dumont?= Date: Wed, 13 Feb 2013 21:09:34 +0000 Subject: [PATCH] hashtable_policy.h (_Hash_code_base): Restore default constructor protected. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 2013-02-13 François Dumont * 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 --- libstdc++-v3/ChangeLog | 7 +++++++ libstdc++-v3/include/bits/hashtable.h | 5 ++++- libstdc++-v3/include/bits/hashtable_policy.h | 14 ++++++-------- 3 files changed, 17 insertions(+), 9 deletions(-) diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog index 03df2a51cefc..338d5d7cae03 100644 --- a/libstdc++-v3/ChangeLog +++ b/libstdc++-v3/ChangeLog @@ -1,3 +1,10 @@ +2013-02-13 François Dumont + + * 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 * 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 b82cda3fa211..246e9bb3bcfd 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 a88b32e65306..f75f49fcd6de 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&)