Listing 5: Using bind.

#include <boost/lambda/lambda.hpp>
#include <boost/lambda/exceptions.hpp>
#include <boost/lambda/bind.hpp>

class missile_error : public std::exception {
public:
  virtual const char* what() {
    return "This missile has gone bad.";
  }
};
class missile {
  bool broken_;
public:
  void fire() {
    if (broken_) 
      throw missile_error();
    std::cout << "Gone like the wind\n";
  }
  void destroy() {
    broken_=true;
  } 
};
int main() {
  using namespace boost::lambda;
  std::vector<missile> vec;
  for (int i=0;i<10;++i)
    vec.push_back(missile());
  vec[4].destroy();
  // Here we go
  for_each(
    vec.begin(),
    vec.end(),
    try_catch(
      bind(&missile::fire,_1),catch_exception<missile_error>(
        std::cout << constant("Caught missile_error: ") 
          << bind(&std::exception::what, _e))));

}