Eric, that was great explanation. Now, everything makes sense. Thanks. :) --- On Mon, 28/2/11, Eric Niebler <[email protected]> wrote:
> From: Eric Niebler <[email protected]> > Subject: Re: [proto] invalid use of incomplete type 'detail::uncvref<...>' > To: [email protected] > 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 > [email protected] > http://lists.boost.org/mailman/listinfo.cgi/proto > _______________________________________________ proto mailing list [email protected] http://lists.boost.org/mailman/listinfo.cgi/proto
