Chris@16: /*============================================================================= Chris@16: Copyright (c) 2005-2007 Dan Marsden Chris@16: Copyright (c) 2005-2007 Joel de Guzman Chris@16: Chris@16: Distributed under the Boost Software License, Version 1.0. (See accompanying Chris@16: file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) Chris@16: ==============================================================================*/ Chris@16: Chris@16: #ifndef PHOENIX_STATEMENT_THROW_HPP Chris@16: #define PHOENIX_STATEMENT_THROW_HPP Chris@16: Chris@16: #include Chris@16: #include Chris@16: #include Chris@16: Chris@16: #include Chris@16: Chris@16: namespace boost { namespace phoenix { Chris@16: Chris@16: struct throw_new_eval Chris@16: { Chris@16: template Chris@16: struct result Chris@16: { Chris@16: typedef void type; Chris@16: }; Chris@16: Chris@16: template Chris@16: static void Chris@16: eval(const Env& env, ThrowExpr& throwExpr) Chris@16: { Chris@16: throw throwExpr.eval(env); Chris@16: } Chris@16: }; Chris@16: Chris@16: struct throw_again_eval Chris@16: { Chris@16: typedef mpl::false_ no_nullary; Chris@16: Chris@16: template Chris@16: struct result Chris@16: { Chris@16: typedef void type; Chris@16: }; Chris@16: Chris@16: template Chris@16: void eval(const Env&) const Chris@16: { Chris@16: throw; Chris@16: } Chris@16: }; Chris@16: Chris@16: inline actor throw_() Chris@16: { Chris@16: return throw_again_eval(); Chris@16: } Chris@16: Chris@16: template Chris@16: actor::type> Chris@16: throw_(const Actor& a) Chris@16: { Chris@16: return compose(a); Chris@16: } Chris@16: }} Chris@16: Chris@16: #endif