David B. Held wrote: > In this code, > > template <class F, typename T> > struct apply_lambda > { > typedef typename mpl::lambda<F>::type f_; > typedef typename mpl::apply<f_, T>::type type; > }; > > MSVC reports that there is no "apply" in "mpl". I thought > it was being stupid, so I preprocessed the source, and > verified that sure enough there *is* no apply in mpl.
That's correct (see lines 58-62 in "boost/mpl/apply.hpp"). One have to use the numbered forms, and it's a recommended practice for writing portable MPL code. The same with 'bind' (for slightly different reasons, but still). > I discovered that apply1 works just fine, however. I assume > that MSVC can't handle the full apply<> machinery, It can, but it doesn't like the name clash between top-level 'apply' template and nested 'apply'-s inside metafunction classes: template< typename F, typename T > struct apply { typedef T type; }; struct her { template< typename T > struct apply // ICE here { typedef T type; }; }; Renaming top-level 'apply' to something else (e.g. 'apply_') resolves the conflict, but IMO it's not worth it - you can use the appropriate numbered form to the same effect. > but is this documented? Now it is :). Speaking seriously, it's on my documentation to-do list. Aleksey _______________________________________________ Unsubscribe & other changes: http://lists.boost.org/mailman/listinfo.cgi/boost