Boost logo

Boost-Commit :

Subject: [Boost-commit] svn:boost r76893 - in trunk: boost/unordered/detail libs/unordered/test/objects libs/unordered/test/unordered
From: dnljms_at_[hidden]
Date: 2012-02-05 03:45:53


Author: danieljames
Date: 2012-02-05 03:45:52 EST (Sun, 05 Feb 2012)
New Revision: 76893
URL: http://svn.boost.org/trac/boost/changeset/76893

Log:
Unordered: Some C++11 allocator_traits fixes.

Can now be used with g++ 4.7. Not activating by default yet.
Text files modified:
   trunk/boost/unordered/detail/allocator_helpers.hpp | 3 ++-
   trunk/libs/unordered/test/objects/minimal.hpp | 2 +-
   trunk/libs/unordered/test/unordered/allocator_traits.cpp | 26 +++++++++++++++++++++++++-
   trunk/libs/unordered/test/unordered/minimal_allocator.cpp | 6 ++++++
   4 files changed, 34 insertions(+), 3 deletions(-)

Modified: trunk/boost/unordered/detail/allocator_helpers.hpp
==============================================================================
--- trunk/boost/unordered/detail/allocator_helpers.hpp (original)
+++ trunk/boost/unordered/detail/allocator_helpers.hpp 2012-02-05 03:45:52 EST (Sun, 05 Feb 2012)
@@ -202,7 +202,8 @@
     template <typename Alloc, typename T>
     struct rebind_wrap
     {
- typedef typename std::allocator_traits<Alloc>::rebind_alloc<T> type;
+ typedef typename std::allocator_traits<Alloc>::
+ template rebind_alloc<T> type;
     };
 
 #else

Modified: trunk/libs/unordered/test/objects/minimal.hpp
==============================================================================
--- trunk/libs/unordered/test/objects/minimal.hpp (original)
+++ trunk/libs/unordered/test/objects/minimal.hpp 2012-02-05 03:45:52 EST (Sun, 05 Feb 2012)
@@ -333,7 +333,7 @@
         typedef std::size_t size_type;
         typedef std::ptrdiff_t difference_type;
         typedef void_ptr void_pointer;
- typedef void_const_ptr void_const_pointer;
+ typedef void_const_ptr const_void_pointer;
         typedef ptr<T> pointer;
         typedef const_ptr<T> const_pointer;
         typedef T& reference;

Modified: trunk/libs/unordered/test/unordered/allocator_traits.cpp
==============================================================================
--- trunk/libs/unordered/test/unordered/allocator_traits.cpp (original)
+++ trunk/libs/unordered/test/unordered/allocator_traits.cpp 2012-02-05 03:45:52 EST (Sun, 05 Feb 2012)
@@ -90,7 +90,12 @@
 {
     typedef empty_allocator<int> allocator;
     typedef boost::unordered::detail::allocator_traits<allocator> traits;
+#if BOOST_UNORDERED_USE_ALLOCATOR_TRAITS
+ BOOST_MPL_ASSERT((boost::is_same<traits::size_type,
+ std::make_unsigned<std::ptrdiff_t>::type>));
+#else
     BOOST_MPL_ASSERT((boost::is_same<traits::size_type, std::size_t>));
+#endif
     BOOST_MPL_ASSERT((boost::is_same<traits::difference_type, std::ptrdiff_t>));
     BOOST_MPL_ASSERT((boost::is_same<traits::pointer, int*>));
     BOOST_MPL_ASSERT((boost::is_same<traits::const_pointer, int const*>));
@@ -123,7 +128,12 @@
 {
     typedef allocator1<int> allocator;
     typedef boost::unordered::detail::allocator_traits<allocator> traits;
- BOOST_MPL_ASSERT((boost::is_same<traits::size_type, std::size_t>));
+#if BOOST_UNORDERED_USE_ALLOCATOR_TRAITS
+ BOOST_MPL_ASSERT((boost::is_same<typename traits::size_type,
+ std::make_unsigned<std::ptrdiff_t>::type>));
+#else
+ BOOST_MPL_ASSERT((boost::is_same<typename traits::size_type, std::size_t>));
+#endif
     BOOST_MPL_ASSERT((boost::is_same<traits::difference_type, std::ptrdiff_t>));
     BOOST_MPL_ASSERT((boost::is_same<traits::pointer, int*>));
     BOOST_MPL_ASSERT((boost::is_same<traits::const_pointer, int const*>));
@@ -186,6 +196,20 @@
     T& operator*() const { return *value_; }
 };
 
+template <>
+struct ptr<void>
+{
+ void* value_;
+ ptr(void* v) : value_(v) {}
+};
+
+template <>
+struct ptr<const void>
+{
+ void const* value_;
+ ptr(void const* v) : value_(v) {}
+};
+
 template <typename T>
 struct allocator3
 {

Modified: trunk/libs/unordered/test/unordered/minimal_allocator.cpp
==============================================================================
--- trunk/libs/unordered/test/unordered/minimal_allocator.cpp (original)
+++ trunk/libs/unordered/test/unordered/minimal_allocator.cpp 2012-02-05 03:45:52 EST (Sun, 05 Feb 2012)
@@ -51,7 +51,13 @@
     //BOOST_MPL_ASSERT((boost::is_same<typename traits::const_void_pointer, void const*>));
 
     BOOST_MPL_ASSERT((boost::is_same<typename traits::difference_type, std::ptrdiff_t>));
+
+#if BOOST_UNORDERED_USE_ALLOCATOR_TRAITS
+ BOOST_MPL_ASSERT((boost::is_same<typename traits::size_type,
+ std::make_unsigned<std::ptrdiff_t>::type>));
+#else
     BOOST_MPL_ASSERT((boost::is_same<typename traits::size_type, std::size_t>));
+#endif
 
     BOOST_TEST(!traits::propagate_on_container_copy_assignment::value);
     BOOST_TEST(!traits::propagate_on_container_move_assignment::value);


Boost-Commit list run by bdawes at acm.org, david.abrahams at rcn.com, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk