Hi, for_each seems to be unable to deal with empty lists, or lists that are built by push_front on an empty list. However, vectors work fine. Here is code which demonstrates the problem. Replacing list with vector makes the code compile.
#include <iostream> #include <boost/static_assert.hpp> #include <boost/mpl/push_front.hpp> #include <boost/mpl/list.hpp> #include <boost/mpl/size.hpp> #include <boost/mpl/for_each.hpp> #include <boost/mpl/alias.hpp> typedef mpl::list<> empty; typedef mpl::list<float> single; typedef mpl::push_front<single, int>::type two; typedef mpl::push_front<empty, int>::type push_on_empty; BOOST_STATIC_ASSERT(mpl::size<empty>::value == 0); //OK BOOST_STATIC_ASSERT(mpl::size<single>::value == 1); //OK BOOST_STATIC_ASSERT(mpl::size<two>::value == 2); //OK BOOST_STATIC_ASSERT(mpl::size<push_on_empty>::value == 1); //OK struct type_printer { type_printer(std::ostream& s) : f_stream(&s) {} template< typename U > void operator()(U &) { *f_stream << typeid(U).name() << '\n'; } private: std::ostream* f_stream; }; int main() { mpl::for_each< empty >( type_printer(std::cout) ); //won't compile mpl::for_each< single >( type_printer(std::cout) ); //OK mpl::for_each< two >( type_printer(std::cout) ); //OK mpl::for_each< push_on_empty >( type_printer(std::cout) ); //won't compile } Regards, -Tom Wenisch Computer Architecture Lab Carnegie Mellon University _______________________________________________ Unsubscribe & other changes: http://lists.boost.org/mailman/listinfo.cgi/boost