Fix VC++13 skip-list iterator incompatibility
authorkhizmax <khizmax@gmail.com>
Mon, 10 Nov 2014 10:01:47 +0000 (13:01 +0300)
committerkhizmax <khizmax@gmail.com>
Mon, 10 Nov 2014 10:01:47 +0000 (13:01 +0300)
cds/container/details/skip_list_base.h
cds/intrusive/skip_list_nogc.h

index 75b1e0907b794b178e6d9a89d9bf9333d107c0ac..e7fd70995028eb3434d4daf25a7a13f5762b9028 100644 (file)
@@ -228,6 +228,11 @@ namespace cds { namespace container {
                     : m_It( it )
                 {}
 
                     : m_It( it )
                 {}
 
+                intrusive_iterator const& underlying_iterator() const
+                {
+                    return m_It;
+                }
+
             public:
                 iterator()
                     : m_It()
             public:
                 iterator()
                     : m_It()
@@ -263,7 +268,7 @@ namespace cds { namespace container {
                 template <typename FwIt>
                 bool operator ==(iterator<FwIt> const& i ) const
                 {
                 template <typename FwIt>
                 bool operator ==(iterator<FwIt> const& i ) const
                 {
-                    return m_It == i.m_It;
+                    return m_It == i.underlying_iterator();
                 }
                 template <typename FwIt>
                 bool operator !=(iterator<FwIt> const& i ) const
                 }
                 template <typename FwIt>
                 bool operator !=(iterator<FwIt> const& i ) const
index 42594679074794edf5f60d7ce89fdf4c9becdbfc..43e7cee873eaffb341848057338ce64c2b3c2c8c 100644 (file)
@@ -146,6 +146,11 @@ namespace cds { namespace intrusive {
                 return it;
             }
 
                 return it;
             }
 
+            node_type * node() const
+            {
+                return m_pNode;
+            }
+
         public:
             iterator()
                 : m_pNode( nullptr )
         public:
             iterator()
                 : m_pNode( nullptr )
@@ -188,7 +193,7 @@ namespace cds { namespace intrusive {
             template <typename Bkoff, bool C>
             bool operator ==(iterator<gc, node_traits, Bkoff, C> const& i ) const
             {
             template <typename Bkoff, bool C>
             bool operator ==(iterator<gc, node_traits, Bkoff, C> const& i ) const
             {
-                return m_pNode == i.m_pNode;
+                return m_pNode == i.node();
             }
             template <typename Bkoff, bool C>
             bool operator !=(iterator<gc, node_traits, Bkoff, C> const& i ) const
             }
             template <typename Bkoff, bool C>
             bool operator !=(iterator<gc, node_traits, Bkoff, C> const& i ) const