Boost logo

Boost :

From: Joel de Guzman (joel_at_[hidden])
Date: 2005-10-12 20:49:43


Eric Niebler wrote:
> Joel de Guzman wrote:
>
>>Docs: http://tinyurl.com/77pz5
>>
>
>
> In "Block Statement", (http://tinyurl.com/b25hr) you show how to use the
> comma operator to sequence statements. I see problems here, especially
> when calling a function that takes a predicate that isn't the last
> argument. For instance, how would you use Phoenix to create a
> filter_iterator?
>
> iterator begin, end;
> ...
> boost::make_filter_iterator(arg1 > 5, begin, end);
> // Oops! ---------------------------^
>
> Isn't that comma going to be Phoenix's overloaded comma?

No. If you want the comma operator to fire, you have to place them
inside parentheses:

     boost::make_filter_iterator((arg1 > 5, blah1, blah2), begin, end);

I remember a very early version of Phoenix named SE (short for
semantic expressions) and Spirit where I used the () operator
instead of the [] operator. For compound expressions, I had
to use the double parens. Example:

     if_(c)
     ((
         do_this,
         then_than,
         finaly_that
     ))

Otherwise, C++ will complain.

Regards,

-- 
Joel de Guzman
http://www.boost-consulting.com
http://spirit.sf.net

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