Thanks Chris and Joel for your replies.
There is an example (at least a test). You can get that here: libs/fusion/test/algorithm/transform/transform.cpp. The doc also contains an example (see the transform docs)
I was looking at this test. But it doesn't include a test of the transform metafunction, I believe. Correct me if I'm wrong.
This is one of the cases where Fusion differs from MPL. Fusion requires a polymorphic function object for the transform. See the docs on "Polymorphic Function Object".
I would suggest to add an example on the "Polymorphic Function Object" page in the documentation. Also, how about adding an index at the end of the documentation? I would like that a lot.
Having said that, and looking at your code, it seems you do not need value transformation (which is what Polymorphic Function Objects do). All you are doing is type manipulation. I'd suggest you to first work on an mpl sequence. Then, when you get your desired MPL sequence, convert it to a fusion sequence through fusion::as_xxx (see conversions in the docs). fusion::as_xxx can take in any valid MPL sequence. Here's an example:
typedef fusion::result_of::as_list<any_mpl_seq>::type list_of_vectors;
This is what I'm doing right now: #include <vector> #include <boost/mpl/assert.hpp> #include <boost/mpl/equal.hpp> #include <boost/mpl/list.hpp> #include <boost/mpl/transform.hpp> #include <boost/fusion/algorithm/transformation/transform.hpp> #include <boost/fusion/algorithm/iteration/for_each.hpp> #include <boost/fusion/sequence/container.hpp> #include <boost/fusion/sequence/conversion/as_list.hpp> #include <boost/type_traits/add_pointer.hpp> using namespace std; using namespace boost; template <typename T> struct add_vector { typedef std::vector<T> type; }; struct A; struct B; struct C; int main() { typedef mpl::list< A, B, C > types; typedef mpl::transform1< types, add_vector<mpl::_1> >::type mpl_list_of_vectors; typedef fusion::result_of::as_list<mpl_list_of_vectors>::type fusion_list_of_vectors; return 0; } Unfortunately, this doesn't compile. I'm using VC 7.1. hpp(33) : error C2504: 'boost::fusion::extension::begin_impl<Tag>::apply<Sequence>' : base class undefined with [ Tag=boost::fusion::traits::tag_of<boost::remove_const<mpl_list_of_vectors>::type>::type ] and [ Sequence=mpl_list_of_vectors ] c:\boost\boost\fusion\sequence\intrinsic\begin.hpp(33) : see reference to class template instantiation 'boost::fusion::extension::begin_impl<Tag>::apply<Sequence>' being compiled with [ Tag=boost::fusion::traits::tag_of<boost::remove_const<mpl_list_of_vectors>::type>::type, Sequence=mpl_list_of_vectors ] c:\boost\boost\fusion\sequence\conversion\as_list.hpp(26) : see reference to class template instantiation 'boost::fusion::result_of::begin<Sequence>' being compiled with [ Sequence=mpl_list_of_vectors ] etc. Is there anything wrong with my code? Christian