text: #ifndef BOOST_STATECHART_EXCEPTION_TRANSLATOR_HPP_INCLUDED
  #define BOOST_STATECHART_EXCEPTION_TRANSLATOR_HPP_INCLUDED
  //////////////////////////////////////////////////////////////////////////////
  // Copyright 2002-2006 Andreas Huber Doenni
  // Distributed under the Boost Software License, Version 1.0. (See accompany-
  // ing file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
  //////////////////////////////////////////////////////////////////////////////
  
  
  
  #include <boost/statechart/event.hpp>
  #include <boost/statechart/result.hpp>
  
  
  
  namespace boost
  {
  namespace statechart
  {
  
  
  
  //////////////////////////////////////////////////////////////////////////////
  class exception_thrown : public event< exception_thrown > {};
  
  
  
  //////////////////////////////////////////////////////////////////////////////
  template< class ExceptionEvent = exception_thrown >
  class exception_translator
  {
    public:
      //////////////////////////////////////////////////////////////////////////
      // The following declarations should be private.
      // They are only public because many compilers lack template friends.
      //////////////////////////////////////////////////////////////////////////
      template< class Action, class ExceptionEventHandler >
      result operator()( Action action, ExceptionEventHandler eventHandler )
      {
        try
        {
          return action();
        }
        catch ( ... )
        {
          return eventHandler( ExceptionEvent() );
        }
      }
  };
  
  
  
  } // namespace statechart
  } // namespace boost
  
  
  
  #endif
  