Boost logo

Proto :

Subject: Re: [proto] invalid use of incomplete type 'detail::uncvref<...>'
From: Hossein Haeri (powerprogman_at_[hidden])
Date: 2011-03-01 03:56:33


Eric, that was great explanation. Now, everything makes sense. Thanks. :)

--- On Mon, 28/2/11, Eric Niebler <eric_at_[hidden]> wrote:

> From: Eric Niebler <eric_at_[hidden]>
> Subject: Re: [proto] invalid use of incomplete type 'detail::uncvref<...>'
> To: proto_at_[hidden]
> Date: Monday, 28 February, 2011, 20:26
> On 3/1/2011 3:15 AM, Hossein Haeri
> wrote:
> > Hi Eric,
> >
> >> boost/proto/matches.hpp:391:13: error: invalid use
> of incomplete
> >> type 'struct
> >>
> boost::proto::detail::uncvref<arity_caller::CanBeCalled<Plus2,
>
> >> mpl_::integral_c<int, 2> > >::type'
> Now look at how you've defined
> >> CanBeCalled:
> >>
> >> template<typename Fun, typename Int> struct
> CanBeCalled;
> >
> > Thanks. I added another specialisation for
> mpl::integral_c<int, n> >
> > and it worked. But, now I'm wondering why on earth was
> that basically
> > needed? I had never touched mpl::integral_c in my code
> snippet. That
> > should have been generated by Proto then, right?
>
> No.
>
> > And, in that case,
> > may I please know why?
>
> Somewhere in your code you're adding two MPL integers.
> That's just how
> MPL works. Your code is assuming a particular type of
> Integral Constant
> (mpl::int_). MPL only promises to give you /a/ MPL Integral
> Constant.
>
> > On the other hand, I'm wondering why GCC never nagged
> about the need
> > for mpl::integral_c<int, 1> when I wrote:
> >
> > EW1<InpPool, GameState, AmmoMsg>() >>
> Plus1();
> >
> > In other words, why is mpl::int_<n> used for the
> above line (when n
> > == 1), whereas mpl::integral_c<int, n> is used
> for the following one
> > (when n == 2)?
> >
> > (EW1<InpPool, GameState, AmmoMsg>() ||
> EW1<InpPool, GameState,
> > AmmoMsg>()) >> Plus2();
>
> Probably because the former isn't doing an addition of MPL
> Integral
> Constants.
>
> This is an MPL "gotcha". Others have complained about it on
> the boost
> list, IIRC.
>
> --
> Eric Niebler
> BoostPro Computing
> http://www.boostpro.com
> _______________________________________________
> proto mailing list
> proto_at_[hidden]
> http://lists.boost.org/mailman/listinfo.cgi/proto
>


Proto list run by eric at boostpro.com