Fix to Tickets #7975 and #8749

Originally Tickets 7975 and 8749 referred only to insertion of keys into
maps, but the very same bug can be reproduced for sets as well.
Moreover, the removal of keys from both also suffers of the same bug.
This commit is contained in:
Bruno Dutra
2015-02-22 20:59:59 -03:00
parent 6a0f617a6c
commit c8fe35643d
4 changed files with 37 additions and 0 deletions

View File

@@ -40,6 +40,7 @@ struct m_item
typedef Key key_;
typedef pair<Key,T> item;
typedef Base base;
typedef m_item type;
typedef typename next< typename Base::size >::type size;
typedef typename next< typename Base::order >::type order;
@@ -62,6 +63,7 @@ struct m_mask
{
typedef void_ key_;
typedef Base base;
typedef m_mask type;
typedef typename prior< typename Base::size >::type size;
typedef typename x_order_impl<Base,Key>::type key_order_;
@@ -123,6 +125,7 @@ struct m_mask
{
typedef void_ key_;
typedef Base base;
typedef m_mask type;
typedef typename prior< typename Base::size >::type size;
typedef typename x_order_impl<Base,Key>::type key_order_;

View File

@@ -33,6 +33,7 @@ struct s_item
typedef void_ last_masked_;
typedef T item_type_;
typedef typename Base::item_ base;
typedef s_item type;
typedef typename next< typename Base::size >::type size;
typedef typename next< typename Base::order >::type order;
@@ -57,6 +58,7 @@ struct s_mask
typedef void_ item_type_;
typedef typename Base::item_ base;
typedef typename prior< typename Base::size >::type size;
typedef s_mask type;
BOOST_MPL_AUX_SET_OVERLOAD( aux::yes_tag, IS_MASKED, s_mask, aux::type_wrapper<T>* );
};

View File

@@ -217,3 +217,19 @@ MPL_TEST_CASE()
>
));
}
MPL_TEST_CASE()
{
typedef insert< map<>, pair<int,int> >::type little_map;
MPL_ASSERT_RELATION(size<little_map>::value, ==, 1);
MPL_ASSERT_RELATION(size<little_map::type>::value, ==, 1);
}
MPL_TEST_CASE()
{
typedef erase_key< map< pair<float,float>, pair<int,int> >, float >::type little_map;
MPL_ASSERT_RELATION(size<little_map>::value, ==, 1);
MPL_ASSERT_RELATION(size<little_map::type>::value, ==, 1);
}

View File

@@ -329,3 +329,19 @@ MPL_TEST_CASE()
find_test<s>();
find_test<s::type>();
}
MPL_TEST_CASE()
{
typedef insert< set<>, int >::type little_set;
MPL_ASSERT_RELATION(size<little_set>::value, ==, 1);
MPL_ASSERT_RELATION(size<little_set::type>::value, ==, 1);
}
MPL_TEST_CASE()
{
typedef erase_key< set< float, int >, float >::type little_set;
MPL_ASSERT_RELATION(size<little_set>::value, ==, 1);
MPL_ASSERT_RELATION(size<little_set::type>::value, ==, 1);
}