From c8fe35643da67a56d1e4408055e8cb9a52757c8d Mon Sep 17 00:00:00 2001 From: Bruno Dutra Date: Sun, 22 Feb 2015 20:59:59 -0300 Subject: [PATCH] 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. --- include/boost/mpl/map/aux_/item.hpp | 3 +++ include/boost/mpl/set/aux_/item.hpp | 2 ++ test/map.cpp | 16 ++++++++++++++++ test/set.cpp | 16 ++++++++++++++++ 4 files changed, 37 insertions(+) diff --git a/include/boost/mpl/map/aux_/item.hpp b/include/boost/mpl/map/aux_/item.hpp index d0df522..a0a98ca 100644 --- a/include/boost/mpl/map/aux_/item.hpp +++ b/include/boost/mpl/map/aux_/item.hpp @@ -40,6 +40,7 @@ struct m_item typedef Key key_; typedef pair 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::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::type key_order_; diff --git a/include/boost/mpl/set/aux_/item.hpp b/include/boost/mpl/set/aux_/item.hpp index e90e490..bd5bc95 100644 --- a/include/boost/mpl/set/aux_/item.hpp +++ b/include/boost/mpl/set/aux_/item.hpp @@ -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* ); }; diff --git a/test/map.cpp b/test/map.cpp index 17ad99d..f39b85d 100644 --- a/test/map.cpp +++ b/test/map.cpp @@ -217,3 +217,19 @@ MPL_TEST_CASE() > )); } + +MPL_TEST_CASE() +{ + typedef insert< map<>, pair >::type little_map; + + MPL_ASSERT_RELATION(size::value, ==, 1); + MPL_ASSERT_RELATION(size::value, ==, 1); +} + +MPL_TEST_CASE() +{ + typedef erase_key< map< pair, pair >, float >::type little_map; + + MPL_ASSERT_RELATION(size::value, ==, 1); + MPL_ASSERT_RELATION(size::value, ==, 1); +} diff --git a/test/set.cpp b/test/set.cpp index ab291d9..0710b41 100644 --- a/test/set.cpp +++ b/test/set.cpp @@ -329,3 +329,19 @@ MPL_TEST_CASE() find_test(); find_test(); } + +MPL_TEST_CASE() +{ + typedef insert< set<>, int >::type little_set; + + MPL_ASSERT_RELATION(size::value, ==, 1); + MPL_ASSERT_RELATION(size::value, ==, 1); +} + +MPL_TEST_CASE() +{ + typedef erase_key< set< float, int >, float >::type little_set; + + MPL_ASSERT_RELATION(size::value, ==, 1); + MPL_ASSERT_RELATION(size::value, ==, 1); +}