Boost logo

Boost :

From: Daryle Walker (darylew_at_[hidden])
Date: 2005-10-13 10:47:36


On 10/12/05 7:31 PM, "Eric Niebler" <eric_at_[hidden]> 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?

I don't think so. The comma used to separate function (call) arguments
always overrides a comma operator. In fact, the docs for the block
statement (as of 2005-Oct-13) mention that:

//=====================================================================
Outside the square brackets, block statements should be grouped. For
example:

    //------------------------------------------
    for_each(c.begin(), c.end(),
        (
            do_this(arg1),
            do_that(arg1)
        )
    );
    //------------------------------------------
//=====================================================================

Wrapping a comma operator chain around a parentheses pair blocks the
interpretation as an argument separator. The reason for the exception for
the square bracket operator is that the operator always takes exactly one
argument, so it "transforms" any attempt at multiple arguments with a comma
operator chain (and spits out an error for zero arguments).

-- 
Daryle Walker
Mac, Internet, and Video Game Junkie
darylew AT hotmail DOT com

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