> > Btw, VC7.1 does not seem to like identity in this (and > David's) scenario > > - it complains that it does not have inner typedef to type, > even though > > it does. > > Can you please post a small example which fails?
Well, your own :) from few hours ago, used something like this (btw, I am using CVS snapshot as of, say, 2 weeks ago): template<typename Result, TypeVector> class Useful { public: typedef typename type_at_non_strict_c<TypeVector, 0>::type Param1; typedef typename type_at_non_strict_c<TypeVector, 1>::type Param2; typedef typename type_at_non_strict_c<TypeVector, 2>::type Param3; } Blatant copy from your mail plus small typo (size_t_c to size_t only) corrected: template <class S, class N> struct type_at_non_strict : mpl::apply_if< mpl::greater<mpl::size<S>,N> , mpl::at<S,N> , mpl::identity<mpl::void_> > {}; template <class S, std::size_t N> struct type_at_non_strict_c : type_at_non_strict<S, mpl::size_t<N> > {}; If I do not replace identity with void_ only, I get the following (nice VC71 elaborate error report): c:\projects\tools\boost\boost\mpl\apply_if.hpp(39) : error C2039: 'type' : is not a member of 'boost::mpl::identity<boost::mpl::void_>' c:\projects\tools\boost\boost\mpl\identity.hpp(44) : see declaration of 'boost::mpl::identity<boost::mpl::void_>' c:\projects\mylib\MetaProgramming.h(26) : see reference to class template instantiation 'boost::mpl::apply_if<C,F1,F2>' being compiled with [ C=boost::mpl::greater<boost::mpl::size<boost::mpl::vector<bool>>,boost:: mpl::size_t<1>>, F1=boost::mpl::at<boost::mpl::vector<bool>,boost::mpl::size_t<1>>, F2=boost::mpl::identity<boost::mpl::void_> ] c:\projects\mylib\MetaProgramming.h(34) : see reference to class template instantiation 'type_at_non_strict<TypeContainer,N>' being compiled with [ TypeContainer=boost::mpl::vector<bool>, N=boost::mpl::size_t<1> ] c:\projects\mylib\Useful.h(37) : see reference to class template instantiation 'type_at_non_strict_c<TypeContainer,N>' being compiled with [ TypeContainer=boost::mpl::vector<bool>, N=1 ] c:\projects\mylib\Used.h(45) : see reference to class template instantiation 'Useful<Result,TypeVector>' being compiled with [ Result=bool, TypeVector=boost::mpl::vector<bool> ] I tried to replace company/project specific names with generic ones, hope I did not ruin the example. Drazen _______________________________________________ Unsubscribe & other changes: http://lists.boost.org/mailman/listinfo.cgi/boost