Boost logo

Boost Users :

Subject: [Boost-users] [phoenix] conditional expression?
From: alfC (alfredo.correa_at_[hidden])
Date: 2011-05-02 05:58:11


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

usr/include/boost/proto/operators.hpp:79:9: error: forming reference
to void
if.cpp:8:43: error: no match for ‘operator<<’ in ‘std::clog <<
boost::phoenix::if_ [with Cond =
boost::phoenix::actor<boost::proto::exprns_::basic_expr<boost::proto::tag::greater,
boost::proto::argsns_::list2<boost::phoenix::actor<boost ... etc,
etc, 100 lines


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