diff options
author | Paolo Carlini <pcarlini@suse.de> | 2007-10-18 19:31:22 +0000 |
---|---|---|
committer | Paolo Carlini <paolo@gcc.gnu.org> | 2007-10-18 19:31:22 +0000 |
commit | 67202da49d8f86671aca7fe4deaac3af996928e5 (patch) | |
tree | b5579db083d66ba31ff9cb07ee98cce65eca750d | |
parent | 37017f4dd64886a2c6164d1c2d01cf4bb72238b6 (diff) | |
download | gcc-67202da49d8f86671aca7fe4deaac3af996928e5.zip gcc-67202da49d8f86671aca7fe4deaac3af996928e5.tar.gz gcc-67202da49d8f86671aca7fe4deaac3af996928e5.tar.bz2 |
allocator.h (struct __alloc_neq): Add.
2007-10-18 Paolo Carlini <pcarlini@suse.de>
* include/bits/allocator.h (struct __alloc_neq): Add.
* include/bits/stl_list.h (list<>::_M_check_equal_allocators): Use it.
From-SVN: r129457
-rw-r--r-- | libstdc++-v3/ChangeLog | 5 | ||||
-rw-r--r-- | libstdc++-v3/include/bits/allocator.h | 17 | ||||
-rw-r--r-- | libstdc++-v3/include/bits/stl_list.h | 3 |
3 files changed, 24 insertions, 1 deletions
diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog index 7014fbc..be967f9 100644 --- a/libstdc++-v3/ChangeLog +++ b/libstdc++-v3/ChangeLog @@ -1,3 +1,8 @@ +2007-10-18 Paolo Carlini <pcarlini@suse.de> + + * include/bits/allocator.h (struct __alloc_neq): Add. + * include/bits/stl_list.h (list<>::_M_check_equal_allocators): Use it. + 2007-10-18 Benjamin Kosnik <bkoz@redhat.com> * include/ext/hash_map: To... diff --git a/libstdc++-v3/include/bits/allocator.h b/libstdc++-v3/include/bits/allocator.h index 8699fc8..8a0d0ee 100644 --- a/libstdc++-v3/include/bits/allocator.h +++ b/libstdc++-v3/include/bits/allocator.h @@ -156,6 +156,23 @@ _GLIBCXX_BEGIN_NAMESPACE(std) } }; + // Optimize for stateless allocators. + template<typename _Alloc, bool = __is_empty(_Alloc)> + struct __alloc_neq + { + static bool + _S_do_it(const _Alloc&, const _Alloc&) + { return false; } + }; + + template<typename _Alloc> + struct __alloc_neq<_Alloc, false> + { + static bool + _S_do_it(const _Alloc& __one, const _Alloc& __two) + { return __one != __two; } + }; + _GLIBCXX_END_NAMESPACE #endif diff --git a/libstdc++-v3/include/bits/stl_list.h b/libstdc++-v3/include/bits/stl_list.h index bb8f930..4de31d8 100644 --- a/libstdc++-v3/include/bits/stl_list.h +++ b/libstdc++-v3/include/bits/stl_list.h @@ -1272,7 +1272,8 @@ _GLIBCXX_BEGIN_NESTED_NAMESPACE(std, _GLIBCXX_STD_D) void _M_check_equal_allocators(list& __x) { - if (_M_get_Node_allocator() != __x._M_get_Node_allocator()) + if (std::__alloc_neq<typename _Base::_Node_alloc_type>:: + _S_do_it(_M_get_Node_allocator(), __x._M_get_Node_allocator())) __throw_runtime_error(__N("list::_M_check_equal_allocators")); } }; |