Boost logo

Boost :

From: Larry Evans (cppljevans_at_[hidden])
Date: 2005-03-01 17:00:42


Thanks for the help, David.

On 03/01/2005 08:25 AM, David Abrahams wrote:
[snip]
> Of course that is way too general. Not every template that might
> match is meant to be a sequence.

OK, but I just want it to work with my fold<...>::type, and making
it as general as possible seemed the fasted way to just get a
compile to work.

> (Also: do you really mean your sequence iterators to be the same type
> as the sequence itself?)

It doesn't really matter to me as long as I get a clean compile
and some result from deref that I can use. If the deref<...>::type
is inherit2<Left,Right>, then I can always get the Left or Right
parts with another template specialization.

>>template <
>> template<typename,typename>class ForwardOpTmpl
>>, typename LeftArg
>>, typename RightArg
>>
>>struct next < ForwardOpTmpl<LeftArg,RightArg> >
>>{
>> typedef RightArg type;
>>};
>>//}--------- cut-here --------
>>But intel-linux said next was ambiguous.
>
> As above, too general, but I'm curious anyway: ambiguous with what? A
> single declaration can't be ambiguous with itself.

I was unclear. The error message was about next:

fold_sequence_test.cpp(98): error: "next" is ambiguous
         typedef next<iter0>::type iter1;
                 ^
See the http://boost-sandbox.sourceforge.net/vault/
in cppljevans/mpl/fold_sequence.zip. The compiler error messages
included in this zip only include the 1st error message. The above
can be seen by simply mv'ing the nearby #if 0 down past the above
statement and compiling.

>>Also, the above
>>code assumes the last arg to fold was:
>>
>> ForwardOpTmpl<arg<2>,arg<1> >
>
> No it doesn't. The last arg to fold has nothing to do with it. It
> might have been a metafunction class. In fact, fold has nothing to do
> with it.

Well, I've got to know the place_holder arg order in order to know
whether next should return the Left or right part of my_inherit<L,R>.

[snip]
>
> !? *More* general? That's definitely going down the wrong road.
>

Yes, but for right now, I just want a compile the works on the
simplest type of Sequence arg to fold.

[snip]
>
> template <class Left, class Right>
> struct next<my_inherit<Left,Right> >
> {
> // ... whatever
> };
>
> would be more appropriate.
>

The fold_sequence_test.zip referred to above does this, but with
inherit2 instead of my_inherit; yet, it still get's a compile
error, as shown by the fold_sequence_test.intel within the zip.


Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk