mirror of
https://github.com/boostorg/mpl.git
synced 2025-08-01 05:44:37 +02:00
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:
@@ -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_;
|
||||
|
@@ -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>* );
|
||||
};
|
||||
|
16
test/map.cpp
16
test/map.cpp
@@ -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);
|
||||
}
|
||||
|
16
test/set.cpp
16
test/set.cpp
@@ -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);
|
||||
}
|
||||
|
Reference in New Issue
Block a user