replace struct internal_disposer with lambda
authorkhizmax <libcds.dev@gmail.com>
Sat, 4 Oct 2014 19:23:12 +0000 (23:23 +0400)
committerkhizmax <libcds.dev@gmail.com>
Sat, 4 Oct 2014 19:23:12 +0000 (23:23 +0400)
cds/intrusive/msqueue.h

index 8d6e0b05f6258312a5da74966c02ba72d7525510..ee83e5446f89f08d1b7d262b137c54d22af14c3a 100644 (file)
@@ -341,17 +341,6 @@ namespace cds { namespace intrusive {
         // GC and node_type::gc must be the same
         static_assert((std::is_same<gc, typename node_type::gc>::value), "GC and node_type::gc must be the same");
 
-        struct internal_disposer
-        {
-            void operator()( value_type * p )
-            {
-                assert( p != nullptr );
-
-                MSQueue::clear_links( node_traits::to_node_ptr(p) );
-                disposer()( p );
-            }
-        };
-
         typedef intrusive::node_to_value<MSQueue> node_to_value;
         typedef typename opt::details::alignment_setter< typename node_type::atomic_node_ptr, traits::alignment >::type aligned_node_ptr;
 
@@ -430,7 +419,13 @@ namespace cds { namespace intrusive {
             // before HP retiring cycle invocation.
             // So, we will never clear m_Dummy
             if ( p != &m_Dummy ) {
-                gc::template retire<internal_disposer>( node_traits::to_value_ptr(p) );
+                gc::retire( node_traits::to_value_ptr(p),
+                    []( value_type * ptr ) {
+                        assert( ptr != nullptr );
+                        MSQueue::clear_links( node_traits::to_node_ptr( ptr ) );
+                        disposer()(ptr);
+                    }
+                );
             }
         }
         //@endcond