Boost logo

Boost :

From: Eric Niebler (eric_at_[hidden])
Date: 2007-04-11 14:46:40

Maurizio Vitale wrote:
> thanks, it sure helped a lot.
> In my case I had to wrap proto::terminal inside a my_domain<>
> wrapper. This was required
> with the simplified code I posted, but I'm mentioning it for the
> benefit of others trying to learn proto.

Do you mean to say this was *not* required with the simple code you posted?

> I still have a couple of issues:
> - although udt_ex(v) is now parsed, udt_ex(v1,v2) is not.

The following program compiles for me. I suspect the problem you're
seeing is not in proto.

     #include <boost/xpressive/proto/proto.hpp>
     struct udt_tag {};
     boost::proto::terminal<udt_tag>::type const udt = {{}};
     int main() {
         return 0;

  I've tried
> to be 2, but this also doesn't seem to work (and if
> debug.hpp is included you get an ambiguous overload
> between debug.hpp:122 and rlocal.hpp:775.

I don't know what rlocal.hpp is. It is not a proto header. I suspect
some other code you're including is interfering. I'm interested to see how.

  The ambiguity goes away
> with numbers larger than 2).
> (anyhow BOOST_PROTO_MAX_ARITY seems to be defined to 5 in
> proto_fwd.hpp)
> - with your suggestion, when an object of class udt_ex is
> encountered in an expression, the corresponding
> node in the parse tree has a udt_tag.


> In my case udt contains additional data, not only extra
> methods and types. What is a good way for getting
> that information into the parse tree?

Put the data in udt_tag. Then rename udt_tag to udt_data or some such.

Is specializing
> as_expr going in the right direction?
> Basically, I'd like something like var/val in the lambda.cpp
> test, but without having to explicitly decorate
> expressions.

But you say above that you're already wrapping expressions. I'm
confused. Maybe you could say a bit about your use case. Do you only
want your udt terminals to have the extra data and members, or all

Eric Niebler
Boost Consulting

Boost list run by bdawes at, gregod at, cpdaniel at, john at