"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