Commit 1bb59e05 by François Dumont

hashtable_policy.h: Fix some long lines.

2014-01-15  François Dumont  <fdumont@gcc.gnu.org>

	* include/bits/hashtable_policy.h: Fix some long lines.
	* include/bits/hashtable.h (__hash_code_base_access): Define and
	use it to check its _M_bucket_index noexcept qualification. Use
	also in place of...
	(__access_protected_ctor): ...this.
	* testsuite/23_containers/unordered_set/instantiation_neg.cc:
	Adapt line number.
	* testsuite/23_containers/unordered_set/
	not_default_constructible_hash_neg.cc: Likewise.

From-SVN: r206632
parent e033516b
2014-01-15 François Dumont <fdumont@gcc.gnu.org>
* include/bits/hashtable_policy.h: Fix some long lines.
* include/bits/hashtable.h (__hash_code_base_access): Define and
use it to check its _M_bucket_index noexcept qualification. Use
also in place of...
(__access_protected_ctor): ...this.
* testsuite/23_containers/unordered_set/instantiation_neg.cc:
Adapt line number.
* testsuite/23_containers/unordered_set/
not_default_constructible_hash_neg.cc: Likewise.
2014-01-13 François Dumont <fdumont@gcc.gnu.org> 2014-01-13 François Dumont <fdumont@gcc.gnu.org>
* include/debug/set.h (set): Implement C++11 allocator-aware * include/debug/set.h (set): Implement C++11 allocator-aware
......
...@@ -260,9 +260,14 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION ...@@ -260,9 +260,14 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
// Compile-time diagnostics. // Compile-time diagnostics.
// _Hash_code_base has everything protected, so use this derived type to
// access it.
struct __hash_code_base_access : __hash_code_base
{ using __hash_code_base::_M_bucket_index; };
// Getting a bucket index from a node shall not throw because it is used // Getting a bucket index from a node shall not throw because it is used
// in methods (erase, swap...) that shall not throw. // in methods (erase, swap...) that shall not throw.
static_assert(noexcept(declval<const _Hashtable&>() static_assert(noexcept(declval<const __hash_code_base_access&>()
._M_bucket_index((const __node_type*)nullptr, ._M_bucket_index((const __node_type*)nullptr,
(std::size_t)0)), (std::size_t)0)),
"Cache the hash code or qualify your functors involved" "Cache the hash code or qualify your functors involved"
...@@ -277,15 +282,11 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION ...@@ -277,15 +282,11 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
"Functor used to map hash code to bucket index" "Functor used to map hash code to bucket index"
" must be default constructible"); " must be default constructible");
// _Hash_code_base has a protected default constructor, so use this
// derived type to tell if it's usable.
struct __access_protected_ctor : __hash_code_base { };
// When hash codes are not cached local iterator inherits from // When hash codes are not cached local iterator inherits from
// __hash_code_base above to compute node bucket index so it has to be // __hash_code_base above to compute node bucket index so it has to be
// default constructible. // default constructible.
static_assert(__if_hash_not_cached< static_assert(__if_hash_not_cached<
is_default_constructible<__access_protected_ctor>>::value, is_default_constructible<__hash_code_base_access>>::value,
"Cache the hash code or make functors involved in hash code" "Cache the hash code or make functors involved in hash code"
" and bucket index computation default constructible"); " and bucket index computation default constructible");
......
...@@ -161,7 +161,8 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION ...@@ -161,7 +161,8 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
__hashtable_alloc& _M_h; __hashtable_alloc& _M_h;
}; };
// Functor similar to the previous one but without any pool of node to recycle. // Functor similar to the previous one but without any pool of nodes to
// recycle.
template<typename _NodeAlloc> template<typename _NodeAlloc>
struct _AllocNode struct _AllocNode
{ {
...@@ -1088,7 +1089,8 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION ...@@ -1088,7 +1089,8 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
std::size_t std::size_t
_M_bucket_index(const __node_type* __p, std::size_t __n) const _M_bucket_index(const __node_type* __p, std::size_t __n) const
noexcept( noexcept(declval<const _Hash&>()(declval<const _Key&>(), (std::size_t)0)) ) noexcept( noexcept(declval<const _Hash&>()(declval<const _Key&>(),
(std::size_t)0)) )
{ return _M_ranged_hash()(_M_extract()(__p->_M_v()), __n); } { return _M_ranged_hash()(_M_extract()(__p->_M_v()), __n); }
void void
...@@ -1175,7 +1177,8 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION ...@@ -1175,7 +1177,8 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
std::size_t std::size_t
_M_bucket_index(const __node_type* __p, std::size_t __n) const _M_bucket_index(const __node_type* __p, std::size_t __n) const
noexcept( noexcept(declval<const _H1&>()(declval<const _Key&>())) noexcept( noexcept(declval<const _H1&>()(declval<const _Key&>()))
&& noexcept(declval<const _H2&>()((__hash_code)0, (std::size_t)0)) ) && noexcept(declval<const _H2&>()((__hash_code)0,
(std::size_t)0)) )
{ return _M_h2()(_M_h1()(_M_extract()(__p->_M_v())), __n); } { return _M_h2()(_M_h1()(_M_extract()(__p->_M_v())), __n); }
void void
......
...@@ -19,7 +19,7 @@ ...@@ -19,7 +19,7 @@
// with this library; see the file COPYING3. If not see // with this library; see the file COPYING3. If not see
// <http://www.gnu.org/licenses/>. // <http://www.gnu.org/licenses/>.
// { dg-error "with noexcept" "" { target *-*-* } 265 } // { dg-error "with noexcept" "" { target *-*-* } 270 }
#include <unordered_set> #include <unordered_set>
......
...@@ -19,7 +19,7 @@ ...@@ -19,7 +19,7 @@
// with this library; see the file COPYING3. If not see // with this library; see the file COPYING3. If not see
// <http://www.gnu.org/licenses/>. // <http://www.gnu.org/licenses/>.
// { dg-error "default constructible" "" { target *-*-* } 287 } // { dg-error "default constructible" "" { target *-*-* } 288 }
#include <unordered_set> #include <unordered_set>
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment