Opened 15 years ago
#1469 new Bugs
[mpl] nested typedef of set has two different meanings
Reported by: | Owned by: | Aleksey Gurtovoy | |
---|---|---|---|
Milestone: | To Be Determined | Component: | mpl |
Version: | Boost 1.34.1 | Severity: | Problem |
Keywords: | Cc: |
Description
This problem was diagnosed by Steve Watanabe after my posting on the developer list (see http://thread.gmane.org/gmane.comp.lib.boost.devel/168339/focus=168366)
Basically the following doesn't compile:
#include <boost/mpl/set.hpp> #include <boost/mpl/vector.hpp> #include <boost/mpl/copy.hpp> #include <boost/mpl/insert.hpp> #include <boost/mpl/inserter.hpp> using namespace boost::mpl; template< typename T > > struct as_set : copy< T , inserter< set<> , insert< _1, _2 > > > {}; typedef set<int,char> a_set; typedef vector<int,int,char> a_vector; typedef as_set< a_set >::type set_as_set; typedef as_set< a_vector >::type vector_as_set; typedef next< begin< a_set >::type >::type THIS_IS_OK; typedef next< next< begin< a_set >::type >::type >::type THIS_IS_OK_AS_WELL; typedef next< begin< a_vector >::type >::type THIS_IS_OK_TOO; typedef next< begin< set_as_set >::type >::type THIS_WORKS_TOO; typedef next< next< begin< set_as_set >::type >::type >::type THIS_FAILS; typedef next< next< begin< vector_as_set >::type >::type >::type THIS_FAILS_TOO;
Steve Watanabe diagnosed this to be a problem of mpl::set using the nested typedef 'type' for two different purposes: one as an alias of the set<>, the other refering to the item type. The result is that upon iteration the termination condition isn't recognized and the iterator blows up
Note:
See TracTickets
for help on using tickets.