aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaolo Carlini <pcarlini@suse.de>2007-10-18 19:31:22 +0000
committerPaolo Carlini <paolo@gcc.gnu.org>2007-10-18 19:31:22 +0000
commit67202da49d8f86671aca7fe4deaac3af996928e5 (patch)
treeb5579db083d66ba31ff9cb07ee98cce65eca750d
parent37017f4dd64886a2c6164d1c2d01cf4bb72238b6 (diff)
downloadgcc-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/ChangeLog5
-rw-r--r--libstdc++-v3/include/bits/allocator.h17
-rw-r--r--libstdc++-v3/include/bits/stl_list.h3
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"));
}
};