
I am making small progress in my attempt to generate a new mpl sequence that I will use to read from a stream. The following code fails to compile: #include <boost/tuple/tuple.hpp> #include <boost/mpl/vector_c.hpp> #include <boost/mpl/transform.hpp> #include <boost/fusion/adapted/struct/adapt_struct.hpp> #include <boost/fusion/include/adapt_struct.hpp> #include <boost/fusion/mpl.hpp> // makes params a MPL sequence #include <boost/fusion/support/is_sequence.hpp> #include <boost/fusion/include/is_sequence.hpp> struct params { double d1; double d2; double d3; unsigned int i4; unsigned int i5; unsigned int i6; unsigned int i7; }; BOOST_FUSION_ADAPT_STRUCT( params, (double, d1) (double, d2) (double, d3) (unsigned int, i4) (unsigned int, i5) (unsigned int, i6) (unsigned int, i7) ) BOOST_MPL_ASSERT(( boost::fusion::traits::is_sequence<params> )); // passes template <typename T1> struct rangify { typedef boost::tuple<T1, T1, T1> type; /// min max incr }; template <typename T> struct fixed_or_range { typedef struct { union { T fixed; typename rangify<T>::type range; }; bool is_fixed; } type; }; typedef boost::mpl::transform< params, fixed_or_range<boost::mpl::_> >::type params_fixed_or_range; I understand that after the macro BOOST_FUSION_ADAPT_STRUCT , params is a fusion sequence. Including <boost/fusion/mpl.hpp> made params a MPL sequence, and therefore I can call boost::mpl::transform<> on it. The compilation error is c:\program files (x86)\boost_1_41_0\boost\mpl\clear.hpp(30) : error C2903: 'apply' : symbol is neither a class template nor a function template 1> c:\program files (x86)\boost_1_41_0\boost\mpl\transform.hpp(113) : see reference to class template instantiation 'boost::mpl::clear<Sequence>' being compiled 1> with 1> [ 1> Sequence=params 1> ] 1> c:\program files (x86)\boost_1_41_0\boost\mpl\eval_if.hpp(41) : see reference to class template instantiation 'boost::mpl::transform1<P1,P2,P3>' being compiled 1> with 1> [ 1> P1=params, 1> P2=fixed_or_range<boost::mpl::_1>, 1> P3=boost::mpl::na 1> ] 1> c:\program files (x86)\boost_1_41_0\boost\mpl\transform.hpp(138) : see reference to class template instantiation 'boost::mpl::eval_if<C,F1,F2>' being compiled 1> with 1> [ 1> C=boost::mpl::or_<boost::mpl::is_na<boost::mpl::na>,boost::mpl::is_lambda_ex pression<fixed_or_range<boost::mpl::_1>>,boost::mpl::not_<boost::mpl::is_seq uence<fixed_or_range<boost::mpl::_1>>>>, 1> F1=boost::mpl::transform1<params,fixed_or_range<boost::mpl::_1>,boost::mpl:: na>, 1> F2=boost::mpl::transform2<params,fixed_or_range<boost::mpl::_1>,boost::mpl:: na,boost::mpl::na> 1> ] 1> c:\users\hich\documents\visual studio 2008\projects\test\test1\main.cpp(51) : see reference to class template instantiation 'boost::mpl::transform<Seq1,Seq2OrOperation>' being compiled 1> with 1> [ 1> Seq1=params, 1> Seq2OrOperation=fixed_or_range<boost::mpl::_1> 1> ] Regards,