"Drazen DOTLIC" <[EMAIL PROTECTED]> writes: > 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):
That's because void_ is for MPL internal use only; it's not a type you should manipulate (I think Aleksey doesn't believe me, but I'm about to prove it... <wink>). Observe the definition of identity (comments added for exposition purposes): template<typename T = void_> struct identity { typedef T type; }; // identity<void_> is a metafunction class which makes it efficient // to pass mpl::identity<> where a lambda expr/metafunction class is // expected. template<> struct identity< void_ > { template< class T1, class T2 =void_, class T3 =void_, class T4 =void_, class T5 =void_ > struct apply : identity< T1 > {}; }; // specialization of lambda<identity<> > for efficiency. template<> struct lambda< identity< void_ > > { typedef identity< void_ > type; }; -- Dave Abrahams Boost Consulting www.boost-consulting.com _______________________________________________ Unsubscribe & other changes: http://lists.boost.org/mailman/listinfo.cgi/boost