--- _concurrent_unordered_impl.h 2013-01-28 07:21:30.000000000 -0600 +++ fixed/_concurrent_unordered_impl.h 2013-02-07 10:59:16.629801000 -0600 @@ -275,14 +275,7 @@ nodeptr_t create_node(sokey_t order_key) { nodeptr_t pnode = my_node_allocator.allocate(1); - __TBB_TRY { - new(static_cast(&pnode->my_element)) T(); - pnode->init(order_key); - } __TBB_CATCH(...) { - my_node_allocator.deallocate(pnode, 1); - __TBB_RETHROW(); - } - + pnode->init(order_key); return (pnode); } @@ -464,7 +457,7 @@ // Erase an element using the allocator void destroy_node(nodeptr_t pnode) { - my_node_allocator.destroy(pnode); + if (!pnode->is_dummy()) my_node_allocator.destroy(pnode); my_node_allocator.deallocate(pnode, 1); }