Boost logo

Boost Users :

Subject: [Boost-users] Boost.Phoenix Exception Handling
From: Stuart Dootson (stuart.dootson_at_[hidden])
Date: 2011-06-10 10:51:53

I've been using Phoenix (the one that came with 1.44 - that's Phoenix v2?)
for a bit, as a Boost.Lambda replacement, mostly happily. But I've come
across a scenario I don't think Phoenix caters for, namely accessing an
exception from a catch_ body, something like this:

std::vector<std::string> errors;
using namespace boost::phoenix;
using namespace boost::phoenix::arg_names;
std::for_each(changes.begin(), changes.end(),
      bind(&SomeClass::AddChange, this, arg1, std::string())
      push_back(ref(errors), bind(&std::runtime_error::what, /* Can I access
the exceptin that's been thrown? */))

I want to aggregate any error information thrown by SomeClass::AddChange in
the 'errors' vector, to be rethrown after the for_each. In Boost.Lambda, I'd
be able to use the '_e' placeholder to access the exception object, but
there seems to be no way of doing so in Phoenix?

So, I'm just wondering if a) I've missed something, and b) is there any
likelihood of this being added into Phoenix v3 at some point?

Stuart Dootson

Boost-users list run by williamkempf at, kalb at, bjorn.karlsson at, gregod at, wekempf at