|
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>
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