Fixed emplace() function
authorkhizmax <libcds.dev@gmail.com>
Tue, 5 Apr 2016 20:35:56 +0000 (23:35 +0300)
committerkhizmax <libcds.dev@gmail.com>
Tue, 5 Apr 2016 20:35:56 +0000 (23:35 +0300)
cds/container/striped_map/std_list.h

index b4368383d6d3a71b88fafcbb29516d98da707f5e..10080dd121e75aa5b3e089772cbd47bda1807923 100644 (file)
@@ -194,10 +194,10 @@ namespace cds { namespace intrusive { namespace striped_set {
             template <typename K, typename... Args>
             bool emplace( K&& key, Args&&... args )
             {
-                iterator it = std::lower_bound( m_List.begin(), m_List.end(), key, find_predicate() );
-                if ( it == m_List.end() || key_comparator()( key, it->first ) != 0 ) {
-                    //value_type newItem( key );
-                    it = m_List.emplace( it, value_type( std::forward<K>(key), std::move( mapped_type( std::forward<Args>(args)...) )) );
+                value_type val( key_type( std::forward<K>( key )), mapped_type( std::forward<Args>( args )... ));
+                iterator it = std::lower_bound( m_List.begin(), m_List.end(), val.first, find_predicate() );
+                if ( it == m_List.end() || key_comparator()( val.first, it->first ) != 0 ) {
+                    it = m_List.emplace( it, std::move( val ));
 
 #           if !defined(CDS_STD_LIST_SIZE_CXX11_CONFORM)
                     ++m_nSize;