
On 10/12/05 7:31 PM, "Eric Niebler" <eric@boost-consulting.com> 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