Boost logo

Boost Users :

Subject: Re: [Boost-users] [phoenix] conditional expression?
From: Thomas Heller (thom.heller_at_[hidden])
Date: 2011-05-02 06:17:29


On Mon, May 2, 2011 at 11:58 AM, alfC <alfredo.correa_at_[hidden]> wrote:
> Hi,
>  Does Phoenix support conditional expression? I know if supports if_
> *statements* but it seems that there's is no conditional (expression*.
> The question what is is the equivalent for
>
>  "(x>2.)?(1.):(-1.)"
>
> in general. For example, I tryed with if_[].else_[] hoping that the
> statement is used as result but with no luck:
>
> #include<boost/phoenix/phoenix.hpp>
> #include<iostream>
> using namespace boost::phoenix;
> using namespace boost::phoenix::arg_names;
> int main(){
>        std::clog << (arg1*arg1)(2.) << std::endl; //returns correctly 4
>        std::clog <<
>                (if_(arg1>2.)[val(1.)].else_[val(-1.)])(2.)
>         << std::endl; //syntax error
>        return 0;
> }
>
> The syntax error points that the expression fails to evaluate as a
> number. Any ideas? -- Thanks, Alfredo

if_(...)[...] and if_(...)[...].else_[...] always return void. This is
the problem you are seeing.
There is a solution to this problem: http://goo.gl/gjH7F
...
if_else(arg1 > 2., val(1.), val(-1.))
...

Regards,
Thomas


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