$include_dir="/home/hyper-archives/boost-commit/include"; include("$include_dir/msg-header.inc") ?>
From: daniel_james_at_[hidden]
Date: 2007-12-18 18:14:50
Author: danieljames
Date: 2007-12-18 18:14:49 EST (Tue, 18 Dec 2007)
New Revision: 42156
URL: http://svn.boost.org/trac/boost/changeset/42156
Log:
Check that I'm using link_ptr & bucket_ptr correctly (they should be distinct
types with an explicit conversion from bucket_ptr to link_ptr).
Text files modified: 
   sandbox/unordered/boost/unordered/detail/hash_table_impl.hpp |    22 +++++++++++++++++++++-                  
   1 files changed, 21 insertions(+), 1 deletions(-)
Modified: sandbox/unordered/boost/unordered/detail/hash_table_impl.hpp
==============================================================================
--- sandbox/unordered/boost/unordered/detail/hash_table_impl.hpp	(original)
+++ sandbox/unordered/boost/unordered/detail/hash_table_impl.hpp	2007-12-18 18:14:49 EST (Tue, 18 Dec 2007)
@@ -53,8 +53,28 @@
             typedef BOOST_DEDUCED_TYPENAME allocator_pointer<node_allocator>::type node_ptr;
             typedef BOOST_DEDUCED_TYPENAME allocator_pointer<bucket_allocator>::type bucket_ptr;
             typedef BOOST_DEDUCED_TYPENAME allocator_reference<value_allocator>::type reference;
+            typedef BOOST_DEDUCED_TYPENAME allocator_reference<bucket_allocator>::type bucket_reference;
+
+#if 1
             typedef bucket_ptr link_ptr;
+#else
+            // This alternative version of link_ptr is used to check that the
+            // implementation is type safe wrt bucket_ptr and link_ptr.
+            //
+            // It's a sort of strict typedef.
 
+            struct link_ptr {
+                link_ptr() : ptr_() { BOOST_HASH_MSVC_RESET_PTR(ptr_); }
+                explicit link_ptr(bucket_ptr p) : ptr_(p) {}
+                bucket_reference operator*() const { return *ptr_; }
+                bucket* operator->() const { return &*ptr_; }
+                operator bool() const { return ptr_; }
+                bool operator==(link_ptr const& x) const { return ptr_ == x.ptr_; }
+                bool operator!=(link_ptr const& x) const { return ptr_ != x.ptr_; }
+            private:
+                bucket_ptr ptr_;
+            };
+#endif
             // Hash Bucket
             //
             // all no throw
@@ -207,7 +227,7 @@
                 {
                     node_ptr p = node_;
                     unordered_detail::reset(node_);
-                    return allocators_.bucket_alloc_.address(*p);
+                    return link_ptr(allocators_.bucket_alloc_.address(*p));
                 }
 
             private: