"Drazen DOTLIC" <[EMAIL PROTECTED]> writes: > Hello, > > I've recently discovered that mpl provides all the functionality I was > previously using from loki, so I decided to switch.
Just a note: Loki (generic programming applied to design patterns) and MPL (C++ template metaprogramming) preally have a different focus; you may yet find some Loki components that are useful to you. > There is one small thing driving me crazy, and I was wondering if I > missed something... I was using loki's TypeAtNonStrict "algorithm" > to give me type from type list at a specified position, or NullType > (loki's internal "null" class) if not found. Now, I need the same > for mpl:vector, and I tried the following 'naïve' approach: Uh, formatting, please! > [TypeVector is boost::mpl::vector<bool>] enum { numParams = > boost::mpl::size<TypeVector>::type::value }; typedef typename > boost::mpl::if_c<(numParams > 2), typename > boost::mpl::at_c<TypeVector, 2>::type, boost::mpl::void_>::type > Param1; [TypeVector is boost::mpl::vector<bool>] enum { numParams = boost::mpl::size<TypeVector>::type::value }; typedef typename boost::mpl::if_c< (numParams > 2) , typename boost::mpl::at_c<TypeVector, 2>::type , boost::mpl::void_ >::type Param1; > I was expecting to get Param1 to be boost::mpl::void_, but to my great > surprise, my compiler (VC7.1) decided to fully evaluate "then" branch > of if_c as well, even though the expression numParams > 2 was false, > and failed. You have two confusion is about the way template instantiation works. Whenever you write something of the form: template_name< ... >::nested_name The template is instantiated. > What would be the "right" way to express my intention? 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_c<N> > {}; > Btw, I would like to congratulate authors of mpl on the job well > done, I am most impressed not only with the features that mpl > provides but also with the errors I get when something goes wrong - > they are far more readable than most of the STL errors I am used to > seeing. Cool! Might I suggest you get ahold of Leor Zolman's latest STLFilt package (www.bdsoft.com)? It contains some great features for formatting nested templates so that they are readable. HTH, -- Dave Abrahams Boost Consulting www.boost-consulting.com _______________________________________________ Unsubscribe & other changes: http://lists.boost.org/mailman/listinfo.cgi/boost