Boost logo

Boost Users :

Subject: Re: [Boost-users] [Phoenix] Simple if_ issue
From: Eric Niebler (eric_at_[hidden])
Date: 2012-07-02 15:54:04


On 7/2/2012 12:10 PM, Nathan Crookston wrote:
> Aaron,
>
> On Mon, Jul 2, 2012 at 1:05 PM, Nathan Crookston
> <nathan.crookston_at_[hidden]> wrote:
>> On Mon, Jul 2, 2012 at 12:51 PM, <Aaron_Wright_at_[hidden]> wrote:
>> <snip code>
>>> What do I need to do in the second test to get it to compile? Can I tell
>>> if_ that its return type is not void?
>>
>> Sadly no -- this was a point of confusion for me too. The correct way
>> to do this is with if_else
>
> Sorry to reply twice. The advice is correct, but the link is wrong
> (I'm not sure where if_else is documented. . .).
<snip>

http://boost-sandbox.sourceforge.net/libs/phoenix/doc/html/phoenix/modules/operator.html#phoenix.modules.operator.ternary_operator

And let me fill in the rationale. The if_else function models the
ternary conditional operator (cond ? <true-case> : <false-case>). This
is an expression, which has a type and a value. When you use
if_(x)[y].else_[z], you're emulating if(x){y;}else{z;}, which is a
statement. Statements don't have types or values in C++. Why does it
matter? Because y and z might have incompatible types, and that's OK in
an if/else statement, but not in a conditional expression.

HTH,

-- 
Eric Niebler
BoostPro Computing
http://www.boostpro.com

Boost-users list run by williamkempf at hotmail.com, kalb at libertysoft.com, bjorn.karlsson at readsoft.com, gregod at cs.rpi.edu, wekempf at cox.net